이 코드는 코드에 해당하지만, 이해하기 쉽다 :
이
A.prototype = {
getWindow: function() {
var win = new B.window();
this.getWindow = function() {
return win;
};
return win;
}
}
사용법 :
우선하는 A 인스턴스를 만들 : 그럼
var a = new A();
를 호출 해당 인스턴스의 getWindow
:
a.getWindow();
여기서, 방법은 A.prototype
입니다. 위의 코드에서 볼 수 있듯이 A.prototype.getWindow
은 new B.window()
및 을 반환하지만을 반환합니다. 그 사이에 인스턴스 객체에 getWindow
이라는 메서드가 만들어집니다. 이제
, 다시 getWindow
를 호출하지 않는 경우 : 인스턴스가 자체가 getWindow
메소드가 객체 때문에
a.getWindow();
A.prototype.getWindow
가 더 이상이라고합니다. 이 메서드는 getWindow
메서드가 처음 호출되었을 때 반환 된 동일한 "win"개체를 반환합니다.
귀하의 패턴은 여러에 대한 A
인스턴스가 자신의 "승리"객체의 인스턴스를 같은 A.prototype.getWindow
방법을 사용할 수 있습니다. 이것을 고려하십시오 : 이것은 당신의 코드가
입니다 :
return (this.getWindow = function() {
return win;
})();
먼저 살펴 보겠습니다
var a1 = new A,
a2 = new A,
a3 = new A;
a1.getWindow(); // creates window W1 and returns it
a2.getWindow(); // creates window W2 and returns it
a1.getWindow(); // returns window W1
a2.getWindow(); // returns window W2
a3.getWindow(); // creates window W3 and returns it
a1.getWindow(); // returns window W1
a2.getWindow(); // returns window W2
a3.getWindow(); // returns window W3
이 :)
가
업데이트 매우 유용한 패턴이다 괄호 안의 표현에서 :
this.getWindow = function() { return win; }
보시다시피, 과제 식입니다. 익명 함수 객체는 this
(인스턴스 객체)이 참조하는 객체의 getWindow
속성에 할당됩니다.
이 함수는 win
개체를 반환합니다.
이 할당 표현식의 결과는 함수 객체 자체입니다! 이것은 괄호 안의 값이 함수 객체라는 것을 의미합니다. 우리가 더 이상 필요하지 않기 때문에 우리는 괄호를 제거 할 수 있습니다
return (the_function_object)();
:
이제 ,의 전체 그림을 살펴 보자
return the_function_object();
을 당신이 볼 수 있듯이,이 함수 객체가 호출되고 이면 해당 함수의 반환 값이 반환됩니다.
위에서 언급 한 것처럼이 함수는 win
을 반환합니다. 따라서 코드는이에 해결합니다
return win;
그래서 어떤 코드가하는 것은 : 를 FIRST, 그것은 this.getWindow
-function() { return win; }
를 할당합니다.
SECOND는 해당 함수를 호출 한 결과 인 win
을 반환합니다.
내 코드는 동일한 결과를 생성하지만, 이해하기 쉽다 : 내가 제대로 이해 그래서 경우
this.getWindow = function() {
return win;
};
return win;
, A 형에 '직접'기능은 동일한 이름을 가진 이전의 프로토 타입 기능을 덮어을? – pimvdb
@pimvdb 아니요 - getWindow 메소드가 인스턴스 객체 자체에 추가됩니다 (위 코드에서 'a'). 'A.prototype.getWindow' 메서드는 수정되지 않았습니다. 그러나'a.getWindow'는 이제'A.prototype.getWindow' 메소드를 숨기므로 **이 프로토 타입 메소드는 인스턴스 객체'a'에 접근 할 수 없게됩니다. –
왜 '반환'의 끝에 '()'이 필요합니까? – theateist