jQuery 소스 코드의 첫 단계를 살펴 보았을 때 jQuery 객체의 생성에 대해 혼란 스러웠습니다. 그것에 대해 오랫동안 생각한 후, 나는 마침내 그것을 느꼈다. 여기 나는 그것을 기록한다
첫 번째 방법 :
var a = function () {return A.Prototype.init ();} A.prototype = {init : function () {this.age = 50; console.log (this); return this;}, age : 100} console.log (a () == new a ());1. 결과가 사실 인 이유를 분석하십시오
a.prototype.init () 함수는 내부적으로 a ()에 의해 호출됩니다.
New A ()는 생성자를 내부적으로 호출하고 해당 생성자는 function () {return A.Prototype.init ();}이며 동일한 호출은 a.prototype.init () 함수입니다.
2. 분석 a.prototype.init () 함수가 반환하는 내용
이에 따라 다르 든이 점을 결정하십시오. 기능을 호출 할 때 분석해야합니다. 프로토 타입 객체의 속성이라고 불리우므로 이것은 프로토 타입 객체 A.Prototype입니다.
이러한 생성 방식에서 A ()를 몇 번이나 부르더라도 실제로는 동일한 객체가 반환되었으므로 객체 B의 수정은 객체 A에 영향을 미칩니다. 아래 그림을 참조하십시오.
var a = a (); var b = a (); console.log (a.age); console.log (b.age); b.age = 22; console.log (a.age); console.log (b.age); console.log (b.age);
그렇다면이 문제를 해결하는 방법은 무엇입니까? jQuery가 사용하는 방법 인 두 번째 방법에 대해 이야기 해 봅시다.
두 번째 방법
var a = function () {return new A.Prototype.init (); // ① ①} A.Prototype = {init : function () {this.age = 50; console.log (this); return this;}, age : 100}A.prototype.init.prototype = a.prototype; // ②var a = new a (); var b = new a (); console.log (a === b); console.log (a.age); console.log (b.age);
① 및 ①의 분석
new a.prototype.init ()는 주로 세 가지를 수행합니다
빈 개체를 만듭니다 var obj = {};
obj object property_proto_는 함수의 프로토 타입을 가리 킵니다.
이것을 A.prototype.init 함수로 OBJ 객체로 바꾸고 A.prototype.init function, a.prototype.init.call (OBJ)을 호출하고 새 개체를 반환하십시오.
반환 된 물체의 프로토 타입은 a.prototype.init.prototype이므로 A.prototype와 관련이 없습니다. 새로 반환 된 물체를 a.prototype에서 상속하기 위해 a.prototype.init.prototype를 A.prototype에 포인트로 만들기 위해
따라서 두 번째 방법은 인스턴스를 생성하고 고유 한 범위가 독립적인지 확인하는 것입니다.
위의 것은 편집자가 소개 한 JavaScript의 새없는 건축 예에 대한 자세한 설명입니다. 도움이되기를 바랍니다. 더 많은 정보를 알고 싶다면 Wulin.com 웹 사이트에주의를 기울이십시오!