new와 instanceof의 내부 메커니즘
5194 단어 instanceof
var obj = (function(){
var obj = {};
obj.__proto__ = O.prototype;
// ...
return obj;
})();
즉 var obj = new O () 는 은밀한 원형 체인 ( proto) 을 되돌려줍니다.O 원형(prototype)을 가리킨다.이것이 바로 new의 내부 작업 방식이다.
다음에 instanceof를 보면 현재 xinstanceofy라는 문장이 있다고 가정하면 그 내부는 실제적으로 다음과 같은 판단을 내렸다.
while(x.__proto__!==null) {
if(x.__proto__===y.prototype) {
return true;
break;
}
x.__proto__ = x.__proto__.proto__;
}
if(x.__proto__==null) {return false;}
x는 은밀한 원형 체인을 따라proto__x. 까지 위로 찾기proto__.__proto__......===y.prototype까지 찾으면true, 즉 x가 y인 실례를 되돌려줍니다.그렇지 않으면false를 되돌려줍니다. x는 y의 실례가 아닙니다.
다음은 두 가지 예를 들어 O의 원형(prototype)에 대한 수정을obj의 성명 이전과 이후의 두 가지 상황에서 instanceof를 사용하여obj를 검측한 결과를 비교한다.
1 function F(){}
2 function O(){}
3
4 O.prototype = new F();
5 var obj = new O();
6 /*
var obj = (function(){
var obj1 = {};
var obj2 = {};
obj2.__proto__ = F.prototype;
obj.__proto__ = obj2;
return obj;
})()
*/
7 console.log(obj instanceof O);//true
8 console.log(obj instanceof F);//true
9 console.log(obj.__proto__===O.prototype);//true
10 console.log(obj.__proto__.__proto__===F.prototype);//true
위 예에서 obj.proto__o.prototype과 모두 new F () 대상을 가리키기 때문에 obj instanceof o 결과는true입니다.
위의 new F () 대상이 objF라고 가정하면 new 내부 메커니즘에 따라 objF.proto__===F.prototype, objF.proto__obj.proto__.__proto__.
그래서 obj instanceof F 결과도true였다.
1 function F(){}
2 function O(){}
3
4 var obj = new O();
5 o.prototype = new F();
6
7 console.log(obj instanceof O);//false
8 console.log(obj instanceof F);//false
9 console.log(obj.__proto__===O.prototype);//false
10 console.log(obj.__proto__.__proto__===F.prototype);//false
또한 위의 new F()라는 객체가 objF라고 가정합니다.
이 예에서obj.prototype의 수정은obj의 성명 이후, 즉obj.proto__o 최초의prototype을 가리키며 자연스럽게obj.proto__objF와도 다르다.그래서 obj instanceof O 결과는false입니다.
마지막으로, obj instance F가false인 것도 잘 이해한다. 이것은obj. 때문이다proto__.__proto__가리키는 것은 Object입니다.prototype.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java instanceof 사용법 상세 및 실례 코드Java instanceof 사용 설명 Java의 instanceof 연산자는 실행할 때 대상이 특정 클래스인지 아닌지를 가리키는 실례입니다.instanceof는 이 대상이 이 특정한 클래스나 하위 클래스의 실례인지...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.