JavaScript- 배열의 프로토 타입을 얻으려고 할 때 '정의되지 않은'

StackOverflow https://stackoverflow.com/questions/673107

  •  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";

?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top