개체가 인스턴스화 될 때 문자열/함수/등일 경우 __proto__
속성이 포함됩니다. 이 속성은 ... Object.prototype
에 __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
};
이 객체가 인스턴스화 될 때 코드 블록을 실행하려면이 __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;
}
});
하지만 그것은 단지 시도하는 예입니다 내가 달성하기 위해 노력하고있어 보여 : 나는까지 해요 어디 있지 여기하다면입니다.
"* a'__proto__' 속성이 포함됩니다. *"- 음, 아니요, ** 상속 **입니다. 'hasOwnProperty' 속성이 모든 객체에 포함되어 있다고 말할 수는 없겠지요? – Bergi
아니요, 더 이상 * 그들을 납치 할 수 없습니다. [좋은 일입니다] (http://stackoverflow.com/a/13040748/1048572). – Bergi