프로토 타입 체인을 파악하려면 먼저 기능 유형을 파악해야합니다. 클래스는 매우 중요한 기능을 가지고 있는데, 이는 생성자를 기반으로 템플릿으로 객체를 만들 수 있다는 것입니다. JavaScript에서는이 기능에는 2 개의 함수가 있습니다
첫째, 일반적인 기능 호출로
둘째, 프로토 타입 객체의 생성자는 New ()입니다.
예를 들어 봅시다
코드 사본은 다음과 같습니다.
기능 a () {
this.name = 'a';
}
함수가 생성되면 어떻게됩니까?
먼저, 기능 객체, 즉 그 자체를 만듭니다.
둘째, 프로토 타입 객체 @a ( @로 표시)를 만듭니다.
셋째, 함수 객체에는 해당 프로토 타입 객체를 가리키는 프로토 타입 포인터가 있으며 여기서는 @A를 가리 킵니다.
넷째, @A 객체에는 생성자 포인터가 있으며, 여기에서는 여기에서는 다음을 가리 킵니다.
http://img.blog.csdn.net/201402222125611500?watermark/2/text/ahr0cdovl2jsb2cuy3nkbi5uzxqvbgpsmtu3mdex/font/5a6l5l2t/fontsize/400/fil/i0jbcma 30/i0jbcma 3 중력/남동쪽
이 프로토 타입 속성의 사용은 무엇입니까?
실제로, 프로토 타입 속성은 현재 함수가 제어 할 수있는 범위를 나타냅니다 (또는 현재 함수가 누구인지를 나타냅니다. 여기서 A는 @A 프로토 타입 객체의 생성자입니다. .
코드 사본은 다음과 같습니다.
기능 a () {
this.name = 'a';
}
var a1 = 새로운 a ();
이것은 다른 공통 언어와 유사합니다.
그런 다음 프로토 타입의 속성을 객체를 가리키면 템플릿으로 생성 된 모든 인스턴스에 영향을 미칩니다
코드 사본은 다음과 같습니다.
기능 a () {
this.name = 'a';
}
var a1 = 새로운 a ();
A.prototype.age = 1;
경고 (a1.age);
결과 : 1
그렇다면 왜 A1 객체가 연령 속성에 직접 액세스 할 수 있습니까? A1 객체의 연령 속성을 정의하지 않습니다.
모든 경우 _proto_ (Firfox, Chrome에서 직접 액세스 할 수 있지만 IE를 지원하지는 않습니다)에 참조 가이 프로토 타입을 가리키기 때문입니다. 여기서 @A,
코드 사본은 다음과 같습니다.
기능 a () {
this.name = 'a';
}
var a1 = 새로운 a ();
경고 (a1._proto_ == A. prototype)
결과 : 사실
속성에 액세스하면 먼저 A1 객체를 검색합니다. 그것을 찾으십시오.
이 시점에서 프로토 타입 체인의 의미는 나옵니다. object.prototype은 최상위 프로토 타입이므로 Object.Prototype 속성이 수정되면 모든 객체에 영향을 미칩니다.
코드를보고 있습니다
코드 사본은 다음과 같습니다.
기능 a () {
this.name = 'a';
}
함수 b () {
this.age = 1;
}
B. prototype = 새로운 a ();
경고 (새 b (). 이름);
우리는 B가 B의 프로토 타입을 A의 인스턴스로 가리킨 다음 B의 인스턴스가 A의 특성에도 액세스 할 수 있음을 보여줍니다. 이것은 JavaScript의 상속입니다. 왜 B. prototype가 a.prototype을 직접적으로 가리키기보다는 A의 인스턴스를 가리키는가?
코드 사본은 다음과 같습니다.
B. prototype = 새로운 a.prototype;
위에 작성된대로 p.prototype의 속성을 수정하면 A의 프로토 타입도 변경 될 것입니다.이 프로토 타입은 부모 클래스를 수정하는 서브 클래스와 동일하며 서브 클래스와 상위 클래스의 속성이 함께 결합됩니다. 부적절한. 다시 말해, B는 또한 @A의 생성자가되고 A와 B는 평행 관계가된다.
다음에 정의 할 수 있습니다.
함수는 함수 B를 상속합니다. 기능 A는 기능 A의 프로토 타입 인 인스턴스가된다.
코드 사본은 다음과 같습니다.
var $ = jQuery = 함수 (선택기, 컨텍스트) {
// 자신의 생성자로 다시 자신을 구성하는 것은 불가능하므로 다른 생성자 인스턴스가 반환되었습니다.
New Init (선택기, 컨텍스트)를 반환합니다.
}
jQuery.fn = jQuery.prototype = {
크기 : function () {
이것을 반환합니다. 길이;
}
}
함수 init (선택기, 컨텍스트) {
}
init.prototype = jQuery.fn ;;
}
이것은 jQuery의 소스 코드입니다.
위의 지식을 사용하여 jQuery는 일반적인 기능에 대한 호출 일 뿐이며, 이는 jQuery 프로토 타입의 다른 생성자, 즉 New init ()에 의해 생성 된 객체를 반환합니다.