this question과 비슷하지만 다르다. 아래 코드는 JavaScript: The Definitive Guide입니다. 그는 기본적으로 Object.create가있는 경우이를 계승하는 상속 메소드를 정의하고 있습니다. 그렇지 않으면 생성자를 사용하여 일반 Javascript 상속을 수행하고 프로토 타입을 교환합니다.Object.create를 사용하는 이점
내 질문에, Object.create가
일반 브라우저
IE에 많이 존재하지 않기 때문에 사용하는 데있어 무엇이 중요한가요? 그것은 분명히 코드를 복잡하게 만들고, 이전 질문에 대한 의견 제시 자 중 한 사람은 Object.create isn't too fast을 언급했습니다.
가끔이 ECMA 5 기능을 사용하기 위해 여분의 코드를 추가 할 때 장점이 있습니다.이 기능은 "이전"방식보다 느릴 수도 있고 그렇지 않을 수도 있습니다.
function inherit(p) {
if (Object.create) // If Object.create() is defined...
return Object.create(p); // then just use it.
function f() {}; // Define a dummy constructor function.
f.prototype = p; // Set its prototype property to p.
return new f(); // Use f() to create an "heir" of p.
}
정말 유용한 답변입니다. 생성 된 객체의 속성을 제어 할 수 있으므로 create가 바람직한 이유를 알 수 있습니다. 나는 왜 당신이'var bob = Object.create (userB, { "id": {value : 12, enumerable : false' 등등, 그러나이 코드가 IE9 이하에서 심하게 충돌하지는 않겠습니까? ? 사용자가 사용하는 브라우저를 제어 할 수있는 (훌륭한) 상황으로 제한되는 코드가 아니겠습니까? –
즉, IE8에서는 이전 JS를 사용하여 새로운 상속 된 메서드를 가져야 할뿐만 아니라 메서드를 프로토 타입 교환 방법이지만, 또한 전달 된 개체를 userB를 상속 한 "자식"개체로 사용하도록 변경해야합니다. {{ "id": {value : 12, enumerable : false ''id ": 12,"name ":"bob "등등이 필요하지 않습니까? –
@AdamRackis, 사실인데, 그대로있는 코드는 이전 버전과 호환되지 않습니다. 이러한 것들을 시도하고 간소화하는 프로젝트들입니다. 그렇지 않다면, 좋은 생각입니다. 그러한 변화를 자동화하는 것이 그리 어렵지는 않을 것입니다. – davin