オブジェクトがインスタンス化されるときは、それは文字列/関数/ etcであり、__proto__
プロパティが含まれます。このプロパティは、オブジェクトがインスタンス化されるとき、コードブロックを実行するために、この__proto__
プロパティをハイジャックすることが可能である場合、私は思ったんだけどハイジャック.__ proto__
Object.prototype == {
__defineGetter__ : __defineGetter__()
__defineSetter__ : __defineSetter__()
__lookupGetter__ : __lookupGetter__()
__lookupSetter__ : __lookupSetter__()
constructor : Object()
hasOwnProperty : hasOwnProperty()
isPrototypeOf : isPrototypeOf()
propertyIsEnumerable: propertyIsEnumerable()
toLocaleString : toLocaleString()
toString : toString()
valueOf : valueOf()
get __proto__ : __proto__() // getter
set __proto__ : __proto__() // setter
};
... Object.prototype
に__proto__
アクセサによって生成されているように見えます。新しいインスタンスに__proto__
を作成するために元のアクセサを呼び出す前に、__proto__
プロパティを、いくつかのコードを実行するカスタムプロパティに置き換えることです。
それは意味がある場合!そうでなければ、私はまでだのはここです:
pro = Object.prototype;
tmp = {};
Object.defineProperty(tmp, '__proto__',
Object.getOwnPropertyDescriptor(pro, '__proto__')
);
delete pro.__proto__;
Object.defineProperty(pro, '__proto__',{
get:function(){
console.warn('intercepted Get __proto__');
return tmp.__proto__;
},
set(p){
console.warn('intercepted Set __proto__');
tmp.__proto__ = p;
}
});
それはまだ正常に動作しますが、それは私が達成しようとしているものを試してみて、お見せするための唯一の例だかどうか言うことはできません。
"* __proto__'プロパティが含まれています*" - まあ、いいえ、**継承**です。 'hasOwnProperty'プロパティがすべてのオブジェクトに含まれているとは言わないでしょうか? – Bergi
いいえ、あなたはそれ以上のものをハイジャックすることはできません。* [それは良いことです](http://stackoverflow.com/a/13040748/1048572)。 – Bergi