Webtech Walker

JavaScriptのゲッタ

JavaScriptでゲッタを定義するのにdefineGetterっていうのが使えて

var obj = {};

obj.__defineGetter__('hoge', function() {
  console.log('hoge!!');
});

obj.hoge; //=> hoge!!

こんな感じで()つけなくても関数が呼び出されるのでプロパティにアクセスのようにして関数を呼び出すことができる。

Node.jsのライブラリのコード読んでるとよくdefineGetterがでてくる(Node.jsのコードというかTJのコードに多いだけな気もする)。

express/lib/request.js at master · visionmedia/express · GitHub

でもdefineGetterはECMAScript非標準なんで非推奨ってMDNに書いてある。

defineGetter | MDN

Object.definePropertyを使えって書いてある。Object.definePropertyを使うとこんな感じ。

var obj = {};

Object.defineProperty(obj, 'hoge', {  
  get: function() {
    console.log('hoge!!');
  }
});

obj.hoge; //=> hoge!!

もしくはこれでもいける。

var obj = {
  get hoge() {
    console.log('hoge!!');
  }
};

obj.hoge; //=> hoge!!

どれが一番いいかはよくわからん。

このエントリーをはてなブックマークに追加