메소드가 생성자에 기록되는 경우는 함수 내의 메소드로 지칭되며, 메소드가 프로토 타입 속성에 기록되는 경우는 프로토 타입의 메소드라고합니다.
• 함수 내의 메소드 : 함수 내에서 메소드를 사용하여 함수 내에서 개인 변수에 액세스 할 수 있습니다. 객체가 새 생성자를 사용하여 생성자 내에서 개인 변수를 작동하도록 요구하는 경우 현재 기능 내에서 메소드를 사용하는 것을 고려해야합니다.
• 프로토 타입의 메소드 : 함수를 통해 많은 수의 객체를 만들어야 할 때,이 객체에는 많은 방법이 있습니다. 현재 기능의 프로토 타입에 이러한 방법을 추가하는 것을 고려해야합니다. 이 경우 코드는 비교적 작은 메모리를 소비합니다.
• 실제 응용 분야 에서이 두 가지 방법은 종종 조합으로 사용됩니다. 따라서 먼저 필요한 것을 이해 한 다음 사용 방법을 선택해야합니다.
// 생성자 afunction a (이름) {this.name = name || '에이'; this.sayhello = function () {console.log ( '안녕하세요, 내 이름은' + this.name); }} // 생성자 bfunction b (이름) {this.name = name || 'b';} b.prototype.sayhello = function () {console.log ( 'hello, 내 이름은 :' + this.name);}; var a1 = new a ( 'a1'); var a2 = new a ( 'a2'); a1.sayhello (); a2.sayhello (); new b (var b2 =); b ( 'b2'); b1.sayhello (); b2.sayhello ();나는 두 개의 생성자를 썼는데, 첫 번째는 a입니다. 두 번째는 생성자 B입니다.이 방법은 생성자 B의 프로토 타입 속성에 대해 말하기를 작성합니다. 생성자 내부에 메소드를 작성하면 생성자를 통해 객체를 초기화하는 비용이 증가하고 프로토 타입 속성에 메소드를 작성하면이 비용이 효과적으로 줄어 듭니다. 객체의 호출 메소드가 프로토 타입 체인에서 메소드를 호출하는 것보다 훨씬 빠르다고 생각할 수도 있습니다. 객체에 많은 프로토 타입이 없으면 속도는 실제로 비슷합니다.
또한 주목해야 할 사항 :
• 먼저, 함수의 프로토 타입 속성에 대한 메소드를 정의하면 메소드를 변경하면이 생성자가 생성 한 모든 객체의 메소드가 변경됩니다.
• 또 다른 요점은 가변 개선 문제입니다. 다음 코드를 살펴볼 수 있습니다.
func1 (); // funct가 실행될 때 func1에 값이 할당되지 않았으므로 오류가 여기에보고됩니다. 오류 : func1은 functionvar func1 = function () {console.log ( 'func1');}; func2 (); // 함수 선언이 홍보되므로 올바르게 실행됩니다 .Function func2 () {console.log ( 'func2');}• 객체 직렬화 문제와 관련하여. 함수의 프로토 타입에 정의 된 속성은 직렬화되지 않습니다. 다음 코드를 볼 수 있습니다.
함수 a (이름) {this.name = name;} a.prototype.saywhat = 'say what ...출력이 { "이름": "DreamApple"}임을 알 수 있습니다.
위의 기사는 JS 생성자의 방법과 프로토 타입에 대해 간략하게 설명합니다. 나는 그것이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.