15 02 2011 javascript Tweet
メモリ上に直接のっているような値はunboxedなのでプロパティの設定ができない。数値リテラルとか。
var x = 1; x.add1 = function () {return this.valueOf() + 1;} // これはだめ console.log(x.add1());
でもコンストラクタからnewされた場合にはプロパティの追加ができる
var x = new Number(1); x.add1 = function () {return this.valueOf() + 1;} console.log(x.add1());
コンストラクタのprototypeに関数突っ込んでチェインできるようにしてみる。
var x = new Number(1); Number.prototype.succ = function () { var n = new Number(this+1); return n; }; console.log(x.succ().succ().succ().succ().toString());
リテラル表記でもNumberから継承されているので、コンストラクタのprototypeに関数突っ込めばメソッドとして呼び出せる
var x = 1; x.constructor.prototype.succ = function () { var n = new Number(this+1); return n; }; console.log(x.succ().succ().succ().succ().toString());
これはなかなか面白い