10

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. 
} 

답변

9

(I 많이 부르는없는 수백, 수천) 자연 아마 당신은 너무 많은 개체를 만들 수 없습니다 때문에 속도 차이가 매우 눈에 띄는하지 않고, 당신이 속도 인 경우 중요한 문제는 아마 JS에서 코딩되지 않을 것이고, 위의 두 가지가 사실이 아니라면, 나는 모든 인기있는 JS 엔진의 몇 가지 릴리스에서 그 차이가 무시할 수있을 것이라고 확신합니다 (이것은 이미 약간). 귀하의 질문에 대한 대답에서

는 이유는 속도 관련되지는 않지만 디자인 패턴 때문에 Object.create 이전 방법 선호 (그와 다른 답변에 설명 된 이유). 이것들은 ES5 속성 속성 (확장 성이 뛰어난 객체를 만들어서 확장 성이 뛰어난 응용 프로그램)을 적절히 활용할 수있게 해주고 상속 계층 구조를 도울 수 있습니다.

순방향 엔지니어링입니다. 우리가 "모든 곳에서 실행되지 않아서 발을 축축하게하지 말라"는 말을하면 매우 천천히 움직일 것입니다. 반대로, 초기 및 야심 찬 채택은 업계가 앞으로 나아갈 수 있도록 돕고, 비즈니스 의사 결정자가 새로운 기술을 지원하고, 개발자가 새로운 아이디어와 지원 프레임 워크를 향상시키고 완벽하게 만드는 데 도움이됩니다. 나는 기술을 지원할 충분한 사람들이 기다리는 것이 당신을 너무 오랫동안 기다리게 할 수 있다는 경험이 있기 때문에 초기 (그러나 예방 적이며 여전히 하위 호환이 가능한) 채택을지지한다. 5 월 IE6 달리 생각하는 사람들에게 교훈이 될 수 있습니다.

+0

정말 유용한 답변입니다. 생성 된 객체의 속성을 제어 할 수 있으므로 create가 바람직한 이유를 알 수 있습니다. 나는 왜 당신이'var bob = Object.create (userB, { "id": {value : 12, enumerable : false' 등등, 그러나이 코드가 IE9 이하에서 심하게 충돌하지는 않겠습니까? ? 사용자가 사용하는 브라우저를 제어 할 수있는 (훌륭한) 상황으로 제한되는 코드가 아니겠습니까? –

+0

즉, IE8에서는 이전 JS를 사용하여 새로운 상속 된 메서드를 가져야 할뿐만 아니라 메서드를 프로토 타입 교환 방법이지만, 또한 전달 된 개체를 userB를 상속 한 "자식"개체로 사용하도록 변경해야합니다. {{ "id": {value : 12, enumerable : false ''id ": 12,"name ":"bob "등등이 필요하지 않습니까? –

+0

@AdamRackis, 사실인데, 그대로있는 코드는 이전 버전과 호환되지 않습니다. 이러한 것들을 시도하고 간소화하는 프로젝트들입니다. 그렇지 않다면, 좋은 생각입니다. 그러한 변화를 자동화하는 것이 그리 어렵지는 않을 것입니다. – davin