2012-12-05 3 views
0

일부 프로젝트는 Object.create() 또는 Object.defineProperties() 기능을 사용합니다. 나는 그것이 추천되는 것이 아닌가?Object.defineProperties/create가 정말로 필요합니까?

x = Object.create(null); 
Object.defineProperty(x, "hello", { 
    value: function() { 
     console.log("hello"); 
    } 
}); 

defineProperty/create

x = {} 

그리고

x = {} 
x.__proto__.hello = function() { 
    console.log("hello"); 
} 

x = Object.create(null); 

의 차이는 매우 상세하고 나에게 긴 것 같다 뭐죠. 언제/왜 사용합니까? 아마도 getters/setters/overriding 속성을 적용하는 것이 좋을지도 모릅니다.

+0

@AndyRay, 나는 그것을 제외하고는 b4를 보았습니다. (더 많은 "개인"속성을 제외하고) 그것을 사용하는데 많은 것을 보지 못했습니다 ... 그래서 qn을 게시하는 것이 더 많은 것을 정리할 것입니다. –

답변

0

큰 차이가 있습니다. 문서를 한번보세요!

  • Object.create는 귀하의 경우 첫 번째 인수, null에서 상속 객체를 생성한다. 반대로 {} - 또는 new Object() - Object.prototype에서 상속되는 새 개체를 만듭니다.
  • __proto__은 표준이 아니므로 사용해서는 안됩니다. 그러나 귀하의 경우에는 Object.prototype.hello = function() {…};을 사용하십시오. 절대 열거 할 수있는 속성을 가진 객체를 절대 확장하지 마십시오!
  • Object.defineProperty은 특수 설명자 개체가있는 개체의 속성을 정의합니다. enumerable, configurablewritable 속성의 기본값은 false으로, 예를 들어 delete x.hello 수 없거나 다른 값을 지정할 수 없습니다. 두 번째 코드 조각 개체 아무것도에서 상속하고 편집 할 hello 특성을 갖는을 만드는 동안

첫 번째 조각은, Object.prototype에서 hello 방법을 상속하는 일반 객체를 생성한다. 나는 많은 연관성을 보지 못한다.

+0

Hmm은 http://jsfiddle.net/vHx6s/ 클래스를 만드는 데 권장되는 방법입니까? 그렇다면 2 행 ('this.name = name')과 3 ('Object.defineProperty (this, "name2", {...})') 사이의 차이점은 무엇입니까? 어느 것이 좋습니다? 쓰기 가능, 설정 가능/덮어 쓰기 가능 등을 제한하고자 할 때만'Object.defineProperty' 만 사용한다고 말할 수 있습니까? –

+0

예. 그러나 나는'name2'의'enumberable'과'configurable'을'false'로 설정하는 이유를 볼 수 없습니다 - 왜 그것을 사용하겠습니까? 'defineProperty'의 사용이 합당한 지 여부는 여러분의 결정입니다. – Bergi

+0

우리는 같은 방식으로 생각하고 있다고 생각합니다.'defineProperty'는 개인적으로/공공적인 속성에 대해 똑같은 일을하는 더 긴 방법 일뿐입니다. 나는 더 읽기 쉽고 이해하기 쉬운 코드를 희생 할 가치가 없다고 생각합니다.) –

관련 문제