JavaScript を Qt っぽくする
元ネタは Qtified JavaScript 。
Qt Quick に移行して以来、JavaScript を使う機会が増えましたが、Qt の綺麗な API に慣れていると JavaScript の API って少し不便に感じる事があります。そのひとつが bool QList::contains(const T & value) const がないことで、今回は JavaScript にこの contains() を追加してみるとういう試みです。
Array.prototype.contains = function(e) {
    return this.indexOf(e) !== -1;
}
と書いた qtified.js ファイルを作成し、qml ファイルの先頭で
import 'qtified.js' as JS
と書いておくと
MouseArea {
    anchors.fill: parent
    property var names: ["Egon", "Peter", "Raymond", "Waldo"]
    onClicked: {
        console.debug(names.contains('Egon'))
    }
}
のような書き方ができるようになります。
しかし、このやり方は少しまずくて、
for (var i in names)
    print(i);
を実行すると以下のように表示されてしまいます。
0 1 2 3 contains
JavaScript 1.8.5 以降使用可能な Object.defineProperty を使うことでこの問題を解決することができて、qtified.js は以下のように変わります。
.pragma library
Object.defineProperty(Array.prototype, "contains", {
    value: function(e) { return this.indexOf(e) !== -1; },     enumerable: false    // This is the default and can be omitted.
})
対処療法的ではありますが、おもしろい試みですね。