JavaScript のオブジェクト

Ruby の object_id を JavaScript でも使えないかなと思って書いてみた。let が無いのがもどかしい。

Object.prototype.getObjectId = function(){
  var object_id = 1;
  return function(){
    if (this.hasOwnProperty('__object_id')){
      return this.__object_id;
    }else{
      object_id++;
      this.__object_id = object_id;
      return this.__object_id;
    }
  };
}();

これを使ってみると、

(1).getObjectId();     // => 2
(1).getObjectId();     // => 3

foo = 100;
foo.getObjectId();     // => 4
foo.getObjectId();     // => 5

bar = Object(200); 
bar.getObjectId();     // => 6
bar.getObjectId();     // => 6

hoge = "HOGE";
hoge.getObjectId();    // => 7
hoge.getObjectId();    // => 8

fuga = Object("FUGA");
fuga.getObjectId();    // => 9
fuga.getObjectId();    // => 9

piyo = [];
piyo.getObjectId();    // => 10
piyo.getObjectId();    // => 10

hogera = Object(piyo);
hogera.getObjectId();  // => 10

オブジェクトとそうでないものとの違いがはっきりわかって面白い。でもこの「オブジェクトに自動変換される」的な挙動は大キライさ。