생성자 방법은 매우 유용하지만 메모리 낭비가 있습니다.
프로토 타입으로 할당 된 기능은 모든 객체에서 공유합니다.
프로토 타입으로 지정된 속성은 독립적입니다 .---- 속성을 수정하지 않으면 공유됩니다.
모든 객체가 동일한 기능을 사용하려면 메모리를 저장하는 프로토 타입 방법을 사용하여 기능을 추가하는 것이 가장 좋습니다.
예:
// ---- 생성자 모드
고양이 물체에 변경되지 않은 속성 "유형"을 추가 한 다음 방법 (먹는 쥐)을 추가하십시오. 그런 다음 프로토 타입 객체 고양이는 다음과 같습니다.
<cript> 기능 고양이 (이름, 색상) {this.name = 이름; this.color = 색상; this.type = "feat"; this.eat = function () {alert ( "Eat Mouse"); }; } // 예제를 생성합니다 : var cat1 = new Cat ( "큰 머리", "노란색"); var cat2 = new Cat ( "Eat er 머리", "검은 색"); Alert (cat1.type); // feat cat1.eat (); // 마우스 경보를 먹는다 (cat1.eat == cat2.eat); // false </script>즉, 각 인스턴스 객체에 대해 유형 속성 및 eat () 메소드는 정확히 동일한 내용입니다. 인스턴스가 생성 될 때마다 내용을 반복하고 더 많은 메모리를 점유해야합니다. 이것은 환경 친화적이거나 효율적이지 않습니다.
// ---- 프로토 타입 모드
JavaScript는 각 생성자가 다른 객체를 가리키는 프로토 타입 속성을 가지고 있다고 규정합니다. 이 객체의 모든 속성과 방법은 생성자의 인스턴스에 의해 상속됩니다.
이는 프로토 타입 객체에서 변경되지 않은 속성과 메소드를 직접 정의 할 수 있음을 의미합니다.
<cript> 기능 고양이 (이름, 색상) {this.name = 이름; this.color = 색상; } cat.prototype.type = "female"; cat.prototype.eat = function () {alert ( "eat mouse")}; // 인스턴스를 생성합니다. var cat1 = 새로운 고양이 ( "큰 머리", "노란색"); var cat2 = 새로운 고양이 ( "2 머리", "검은 색"); Alert (cat1.type); // cat cat1.eat (); // 마우스 알림을 먹는다 (cat1.eat == cat2.eat); // truef </script>이때, 모든 인스턴스의 유형 속성 및 eat () 메소드는 실제로 메모리 주소이며 프로토 타입 객체를 가리키므로 작동 효율을 향상시킵니다.
JS 생성자와 프로토 타입 프로토 타입의 차이점에 대한 위의 소개는 내가 공유하는 모든 컨텐츠입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.