__proto__ = null
__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 };
とできる。オブジェクトをハッシュとして使う時とかにも便利かも。