, 그것은 자신의 프로토 타입으로 Point
개체가 모든 글로벌 변수를 작동합니다 Point
의 정의에 오류가 있습니다. 나중에 Point
을 함수로 사용하기 때문에 new
을 원하지 않습니다. 그러나 new function() { }
은 익명 함수가 생성자 인을 호출하고 new
으로 만든 비 함수 개체를 반환합니다.
전체 작업 예제 : Live Copy | 위의 Live Source
var Point = function(){};
var Line = function(){};
Line.prototype = new Point();
var lineInstance = new Line();
var pointInstance = new Point();
for(key in window) {
if(window[key] instanceof Point){
console.log(key + " is 'instanceof' Point");
}
}
참고 :
첫 번째 회선에 new
.
실제로는 new Point
과 new Line
을 사용하여 개체를 만듭니다.
루프의 두 위치에서 모두 window
을 사용했습니다. 한 곳에서 window
을 사용하지만 다른 곳에서는 this
을 사용하는 것이 혼란 스럽습니다 (이 경우 두 곳 모두 동일한 객체를 참조 함). 당신의 목표는 자신의 prototype
재산으로 Point
객체를 사용하는 함수 (라인 Line
를) 찾을 경우
(해당 속성이 하지 어떤 객체의 프로토 타입입니다 있습니다,하지만 이 될 것입니다new
을 통해 해당 기능을 통해 생성 된 객체의 프로토 타입) 다음 prototype
속성을 확인하십시오. Live Copy |
이 가장 일례로 설명한다 :
function Foo() {
}
Foo.prototype.bar = 42;
var f = new Foo();
console.log(f.bar); // "42"
Foo
함수 prototype
라는 속성을 갖는다. new Foo
을 통해 새 객체를 만들면 기본 프로토 타입이 Foo.prototype
에서 가져옵니다. 따라서 해당 객체에서 속성을 찾고 자체 복사본이없는 경우 JavaScript 엔진은 프로토 타입을보고 이인지 확인합니다. 하나있다. 그리고 위의 마지막 줄은 콘솔에 "42"
을 로깅합니다.
(* 객체의 기본 프로토 타입은 객체의 속성으로 액세스 할 수 없다고 말하면 표준에 따라 JavaScript에 해당합니다. 그러나 많은 엔진에서 제공하는 확장자가 아닌 확장이 있습니다. , __proto__
이라는 정확히 일치하는 : 개체의 기본 프로토 타입. 그러나 표준이 아닙니다. 개체를에 전달하여 개체의 프로토 타입을 가져올 수 있습니다.
그리고 마침내 아마도 예기치 않게 예일 수도 있지만, 보통은 기대하지 않을 것입니다. Line
은 Point
에서 상속되며 "is a"관계가 없으므로 (Line
은 Point
이 아닙니다). 여기서 일반적인 관계는 구성 인이고 상속은 아닐 것입니다. Line
은Point
s이지만, Line
은 Point
이 아닙니다.
'Line.prototype = new Point();'? 'Point()'를 인스턴스화하는 속성을 찾으십니까? – adeneo
@adeneo 예, 그게 내가 찾고있는 것입니다. – Kivylius