Javascript 프로토타입 정의: 두 가지 방법의 비교
Javascript에서 프로토타입을 정의할 때 개발자에게는 명명된 함수 사용이라는 두 가지 기본 옵션이 있습니다. 표현식 또는 객체 리터럴 할당. 이러한 메서드는 다양한 용도로 사용되며 프로토타입 멤버 상속에 다양한 영향을 미칩니다.
옵션 1: 명명된 함수 표현식
Person.prototype.sayName = function(name) { alert(name); }
이 구문은 기존 프로토타입 객체를 확장합니다. sayName이라는 새 속성을 추가하면 됩니다. Person 클래스의 인스턴스가 이미 존재하는 경우 이 새 메서드를 상속합니다. 그러나 기존 프로토타입 멤버는 영향을 받지 않습니다.
옵션 2: 객체 리터럴 할당
Person.prototype = { sayName: function(name) { alert(name); } }
옵션 1과 달리 이 방법은 전체 프로토타입 객체를 새로운 객체 리터럴. 결과적으로 기본 생성자 함수를 포함하여 기존 프로토타입 멤버가 모두 손실됩니다. 해당 멤버에 의존하는 클래스의 인스턴스가 이미 있는 경우 이로 인해 예기치 않은 동작이 발생할 수 있습니다.
기능적 차이점
두 메서드의 주요 기능적 차이점은 Option입니다. 1은 모든 기존 인스턴스의 프로토타입을 수정하는 반면 옵션 2는 이후에 생성된 인스턴스에만 영향을 미칩니다. 덮어쓰기.
하나를 선택할 때의 이점
옵션 1은 기존 객체를 변경하지 않고 프로토타입 객체의 대상 확장을 허용하므로 더 깔끔하고 효율적인 것으로 간주됩니다. 회원. 반면에 옵션 2에는 중요한 프로토타입 기능을 실수로 덮어쓸 위험이 있습니다.
외국 또는 네이티브 프로토타입을 확장하는 경우 예상치 못한 결과를 피하기 위해 옵션 1을 권장합니다. 객체 리터럴 구문을 선호하는 경우 Object.sign() 또는 유사한 유틸리티 함수를 사용하여 프로토타입을 안전하게 확장할 수 있습니다.
Object.assign(Person.prototype, { sayName: function(name) { alert(name); } });
위 내용은 명명된 함수 표현식 또는 객체 리터럴 할당 중 어떤 Javascript 프로토타입 정의 방법이 더 낫습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!