옵션 2가 프로토 타입에 암시 적으로 바인딩 된 특정 기능을 제거한다고 가정합니다.
예. 암시 적으로 바인딩 된 속성은 constructor
속성이지만 거의 필요하지 않습니다.
기능상의 차이점은 무엇입니까?
옵션 1은 기존 프로토 타입을 확장하는 것입니다.프로토 타입 개체에서 상속하는 Person
인스턴스가 이미있는 경우 sayName
메서드도 사용할 수 있습니다. 옵션 2를 사용하면 새 프로토 타입은 덮어 쓰기 후에 인스턴스화 된 객체에만 사용됩니다.
다른 하나를 선택하면 어떤 이점이 있습니까?
이들은 이제 스스로 설명해야합니다. 옵션 1 (확장)은 더 깨끗한 것으로 간주되며, 외국/알려지지 않은/원시 프로토 타입을 수정하는 경우 필수 항목입니다. 여전히 객체 리터럴 구문을 더 좋아한다면, 당신은 기존의 프로토 타입을 확장 할 Object.assign
을 사용하는 것이 좋습니다 옵션 2.
을 피하십시오 : 당신은 사전 ES6 환경 polyfill Object.assign
해야 할 수도 있습니다
Object.assign(Person.prototype, {
sayName: function(name) {
alert(name);
}
});
. 또는 $.extend
또는 _.extend
도 올바르게 작동합니다. 분명히 좋아하는 라이브러리에는이를위한 도우미 기능이 있습니다.
[이 프로토 타입 선언의 차이점은 무엇입니까?] (http://stackoverflow.com/questions/16773061/what-is-the-difference-between-the-prototype-declaration) – Bergi