Kengo's blog

Technical articles about original projects, JVM, Static Analysis and JavaScript.

enchant.jsにpull request送った

動的に生成する要素のデザインにCSSを使いたいなぁ、Entityのidやclassに触れるといいなぁ、ということで送りました。

QUnitによるユニットテスト付きです。QUnitはプロジェクトに含まれていなかった要素なので採用いただくのが好ましいかどうかちょっとわからないのですが、そのへんの判断はお任せするということで考えなしに送ってしまいました。

Object.definePropertiesとは

今回のdiffを見ていただくとわかりますが、とてもシンプルなコードでgetterとsetterが追加できています。それぞれのメソッドが何をしているのかがわかる、読みやすいコードです。

/**
 * DOMのID.
 * @type {String}
 */
id: {
    get: function() {
        return this._element.id;
    },
    set: function(id) {
        this._element.id = id;
    }
},

なんでこんなことができるの?と思って調べてみたら、ECMA Script 5から定義されたObject.definePropertyやObject.definePropertiesを使うと簡単にgetter/setterによるプロパティアクセスが実現できるのですね。勉強になりました。

Object.definePropertiesってなんだろう - jsdo.it - share JavaScript, HTML5 and CSS

もちろん一部のブラウザではまだ使えないのでしょうが、enchant.jsではメソッドが存在しない場合は作ってしまうというワザで対応しています。こういうことができるのもJavaScriptの持つテキトーさならではですね。