JavaScript- 배열의 프로토 타입을 얻으려고 할 때 '정의되지 않은'
-
21-08-2019 - |
문제
나는 그것이 5am 뇌 배수라고 생각하지만, 이것을 이해하는 데 어려움을 겪고 있습니다.
obj = ['a','b'];
alert( obj.prototype ); //returns "undefined"
왜 그렇지 않습니다 obj.prototype
반환 기능 Array(){ }
프로토 타입으로? 참조합니다 Array
생성자로서.
해결책
인스턴스에는 프로토 타입이 없기 때문에 클래스*는 그렇습니다.
아마도 당신이 원할 것입니다 obj.constructor.prototype
또는 대안 적으로 obj.constructor==Array
* 더 정확하기 위해 건설자 프로토 타입이 있지만 물론 JS 기능 = 클래스 = 생성자입니다.
다른 팁
당신이 액세스 할 수 있는지 잘 모르겠습니다 prototype
객체의 인스턴스에서 객체. 다음 행동이 도움이 될 수 있습니다.
alert(Array); // displays "function Array() { [native code] }"
alert(Array.prototype); // displays ""
alert(['a','b'].constructor); // displays "function Array() { [native code] }"
obj.prototype
돌아 오지 않습니다 function Array() { ... }
그것이 객체의 생성자입니다.
당신의 예에서 obj
AN의 인스턴스입니다 Array
, 수업이 아닙니다 Array
그 자체.
예를 들어 이해하는 또 다른 방법은 사례 객체 (또는 클래스)의 경우, 당신은 객체 (또는 클래스) 자체에서만 상속 될 수 있습니다.이 예에서는 당신이 Array
객체, 그러나 배열 객체의 직접 인스턴스가 아닙니다. obj
.
ECMA 사양에 따르면 객체의 프로토 타입 링크가 보이지 않지만 대부분의 최신 브라우저 (Firefox, Safari, Chrome)를 통해 볼 수 있습니다. __proto__
속성이 있으니 시도해보십시오.
obj = ['a','b'];
alert( obj.__proto__ );
객체에는 건설에 '생성자'속성이 설정되어 있으므로 다음을 시도 할 수 있습니다.
obj = ['a','b'];
alert( obj.constructor.prototype );
하지만, obj.constructor
객체의 공로 후에 변경할 수 있습니다. obj.constructor.prototype
, OBJ의 실제 프로토 타입 포인터를 변경하지 않고.
실제로 내 차 한 잔은 아니지만 "obj"를 배열로 정의하는 방법은 무엇입니까? 시험을 마친
obj = new Array();
obj[0] = "a";
obj[1] = "b";
?