読者です 読者をやめる 読者になる 読者になる

素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

__proto__ = null

javascript

__proto__プロパティにnullを代入すると、Object.prototypeのメソッドを継承しないクリーンなオブジェクトを手に入れることができる。

var o = {__proto__: null};
console.log(typeof o.toString); // undefined
console.log('__proto__' in o); // false
console.log(typeof o.__proto__); // undefined
console.log(Object.getPrototypeOf(o)); // null
console.log(o instanceof Object); // false
'' + o; // TypeError: can't convert o to primitive type

何故か__proto__に代入すると、__proto__プロパティ自体がなかったことになってる。Object.getPrototypeOfはきちんとnullを返す。prototypeにnullを代入してnewする方法では、上のようなオブジェクトは作れないみたい。

これを使うと、map、filterなどを使う時の便利な関数(__noSuchMethod__) - 素人がプログラミングを勉強するブログは、

var methodCaller = {
  __noSuchMethod__: function (name, args) {
    return function (receiver) {
      return receiver[name].apply(receiver, args);
    }
  },
  __proto__: null
};

とできる。オブジェクトをハッシュとして使う時とかにも便利かも。