2011-11-03 2 views
3

더글러스 Crockford의 소개 JavaScript lecture에서 객체로 매개 변수로 링크 된 새 객체를 만드는 데 사용해야하는 object 함수를 언급했습니다. 나는 그가 내가JavaScript 함수는 소문자 "o"로 객체를 호출했습니다.

var objB = object(objA); 

을 말한다면 그가 명시 적으로처럼 공식화하지 않았다 있지만 objB의 내부 [[prototype]] 참조가, objA로 설정되어 있는지입니다 무엇을 의미하는지 생각합니다.

Object.create = function(o) { 
    var F = function() {}; 
    F.prototype = o; 
    return new F(); 
} 
: 한편

은, 내가있는 그는 모두에서 이러한 기능을 언급하는 대신 다음과 같은 기능을 프로토 타입에서 객체를 생성하는 정의의 자신의 방법을 제시하지 않는, book 그의 읽고

새로 생성 된 개체의 내부 [[prototype]] 링크를 생성자 함수 prototype 속성이 가리키는 대상으로 설정하는 new 연산자의 동작을 본질적으로 활용합니다.

제 질문은 왜 내장 함수를 생략하고 같은 것을하기 위해 자신의 방법을 고안했을까요? object 함수에 대한 이전 호출

var objB = Object.create(objA); 

정말 동일 또는 약간의 차이가있다?

+0

저는 firefox 7이고 object ({test : 'blah'})입니다. 'object is not defined'에 대한 에러를 던집니다. 아마도 '객체'는 그가 만든 함수일까요? – Stephen

+0

맞습니다. 나는 그것을 시도해야합니다 : $ –

답변

3

두 함수는 하나이며 동일하며 둘 다 JavaScript에 내장되어 있지 않습니다. Crockford의 article에서 왜 다른 명명 규칙을 사용했는지 설명합니다.

미래의 편집 : 나는이 오래된 대답을보고 Object.create()이 참으로 원시 (그리고 매우 중요한) ES5 방법이라는 것을 지적하고 싶었습니다.

+0

매우 역사를 보는 데 도움이됩니다. 감사 –

1

차이는 없습니다. 그리고 여기에 "단순화 된"설명이 있습니다 :

사실, 자바 스크립트의 모든 것은 객체이고 Object에서 상속됩니다.

새로운 키워드를 사용하는 경우 새로운 유형의 객체, 실제로는 객체의 생성자를 정의하는 지시어로 "function"을 볼 수 있습니다. 당신이

function doSomething(){ 
    alert("works"); 
} 

아래의 예에서와 같이 새 키워드 및 통화 기능을 사용하지 않을 경우 자바 스크립트 엔진이 prototype 속성을 포함 개체 해봐요을 만들 것,이 프로토 타입은 해봐요 타입 객체의 정의가 만들어집니다 생성자를 포함합니다 위 코드로 자바 스크립트 개발자. 함수 또는 프로토 타입에서 bult의 경우 생성자가 원시 코드를 사용합니다.

관련 문제