각 JavaScript 함수에는 프로토 타입 속성이 있습니다 (JavaScript 객체에는이 속성이 없습니다). 이 속성은 프로토 타입 객체 인 객체를 나타냅니다. JavaScript를 사용하면이 프로토 타입 객체를 수정할 수 있습니다.
수정하는 두 가지 방법이 있습니다.
방법 1 : 원래 프로토 타입 객체에 속성 또는 메소드 추가
function person () {} person.prototype.add = function () {alert (this.name);}; person.prototype.name = "aty"; var p1 = new person (); p1.add (); // aty방법 2 : 프로토 타입 객체를 다시 쓰기 (덮어 쓰기)
function person () {} person.prototype = {add : function () {alert (this.name);}, 이름 : "aty"} var p2 = new person (); p2.add (); // aty위의 두 가지 방법이 프로토 타입을 수정할 수 있다는 것을 알 수 있습니다. 차이점은 무엇입니까? 권장 방법은 무엇입니까?
function person () {} function Animal () {} var person = new person (); var 동물 = new Animal (); // 프로토 타입 person.say = function () {alert ( "person");} // 프로토 타입 동물을 수정합니다 .Prototype = {say : function () {Alert ( "person"); // personanimal.say (); // upphed typeerror : undefined는 함수가 아닙니다먼저 객체를 생성 한 다음 프로토 타입을 수정하면 메소드 1을 사용하면 생성 한 객체가 수정 된 프로토 타입에 올바르게 액세스 할 수 있습니다. 방법 2를 사용하는 경우 생성 한 객체는 수정 된 프로토 타입에 액세스 할 수 없습니다. 이 관점에서, 분명히 방법 1은 방법 2보다 낫다. 왜 이런 일이 일어나고 있습니까?
function person () {} function Animal () {} var person = new person (); var 동물 = new Animal (); Alert (person .__ proto_ == person.prototyp); // truealert (동물 .__ proto_ === 동물.prototype); // true // modify prototype person.prototype.say = function () {alerfort ( "); = {say : function () {alert ( "person");}} alert (person .__ proto_ === person.prototype); // truealert (동물 .__ proto_ === 동물성); // false분명히 이것은 Java에서 "참조 수정"및 "참조로 가리키는 객체 수정"과 매우 유사하며 효과는 동일합니다.
JavaScript 프로토 타입의 수정과 다시 쓰기 (오버 라이팅)의 차이에 대한 위의 자세한 설명은 내가 공유하는 모든 컨텐츠입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.