Drkcore

15 02 2011 javascript Tweet

Javascriptのboxedとunboxed

メモリ上に直接のっているような値は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());

これはなかなか面白い

About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021