文字列/関数/その他のオブジェクトがインスタンス化されると、__proto__
プロパティが含まれます。このプロパティは、 ...の__proto__
アクセサーによって生成されるようです。Object.prototype
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
};
__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;
}
});
まだ適切に動作するかどうかはわかりませんが、私が達成しようとしていることを示すための例にすぎません.