2014-10-22 6 views
0

에서 정의되지 않는다 : fiddle에서자바 스크립트 참조는 다음과 같은 목적을 감안할 때 생성자

function MyObject() { 
    window.myFunc1 = this.myFunc1; 
    window.myFunc2 = this.__proto__.myFunc2; 
} 

MyObject.prototype.anotherFunc = function() { 
    window.myFunc3 = this.myFunc3; 
    window.myFunc4 = this.__proto__.myFunc4; 
} 

MyObject.prototype.myFunc1 = function() { console.log(1); } 

MyObject.prototype.myFunc2 = function() { console.log(2); } 

MyObject.prototype.myFunc3 = function() { console.log(3); } 

MyObject.prototype.myFunc4 = function() { console.log(4); } 

var o = new MyObject(); 
o.anotherFunc(); 
window.myFunc1(); 
window.myFunc2(); 
window.myFunc3(); 
window.myFunc4(); 

이온 성 프레임 워크하에 iOS 앱과 결과를 테스트 할 때 내가 예상된다 무엇을 얻고 있지만 해요 (사파리 테스트 디버거)는 다음과 같습니다.

window.myFunc1 -> undefined 
    window.myFunc2 -> it works! 
    window.myFunc3 -> it works! 
    window.myFunc4 -> it works! 

프로토 타입이 생성되기 전에 객체에 연결되어 있지 않습니까?

편집

부착 바이올린과 작업 예, 좋은 질문

+0

어, 실제로 어디에서나 'MyObject'와'anotherFunc'를 호출하고 있습니까? – Bergi

답변

0

나는 다음과 같은 결과가 [...]

나는 그것을 재현 할 수 없습니다 얻고을 조정. 이 시도 :이 생성되기 전에

function MyObject() { 
    console.log(this.myFunc1); 
    console.log(Object.getPrototypeOf(this).myFunc2); 
} 
MyObject.prototype.anotherFunc = function() { 
    console.log(this.myFunc3); 
    console.log(Object.getPrototypeOf(this).myFunc4); 
} 

MyObject.prototype.myFunc1 = function() { } 
MyObject.prototype.myFunc2 = function() { } 
MyObject.prototype.myFunc3 = function() { } 
MyObject.prototype.myFunc4 = function() { } 

var o = new MyObject(); 
o.anotherFunc() 

객체에 부착 된 프로토 타입 아닌가?

어, 아니오. 프로토 타입은 실제로 존재하지 않는 객체에 붙어있을 수 없습니다 :-) 동시에 객체가 프로토 타입으로 생성되고, 객체가 없으면 존재하지 않는다고 동시에 생각하는 것이 가장 좋습니다.

생성자가 실행되기 전에 객체 (프로토 타입 포함)가 생성되었다는 것을 의미 할 수도 있습니다.

+0

그럼 왜 객체 작성자의 this.myFunc1이 정의되지 않았는지 이해하지 못합니다. – Miquel

+0

그렇지 않았습니다. 귀하의 예를 재현 할 수 없습니다. 어쩌면 당신은 [피들] (http://jsfiddle.net/)을 만들거나 그 문제를 보여줄 수 있습니까? – Bergi

+0

글쎄, 나는 [피들] (http://jsfiddle.net/63dbgcfe/)에서 제대로 작동한다는 것을 깨달았을 때 그렇게했다. 나는 항상 window.myFunc1이 정의되지 않은 사파리 디버거에서 ios ionic app (angular)로 테스트했다. – Miquel

1

비정상적인 방식으로 개체를 생성하면 this이 예상 한 것과 다른 것으로 바인딩 될 수 있습니다. 내 경우에는 node 모듈에서 생성자를 내보내고 undefined 인 프로토 타입 함수와 동일한 효과를 가진 new require('module')();과 함께 객체를 생성했습니다.

관련 문제