2013-10-13 2 views
12

내가 세터와 게터를 가진 개체를 만들려고하고,이 내 코드입니다 :Google 크롬 Object.defineProperty에서 잘못된 동작이 발생 했습니까?

var Player = function(height){ 
    var _height = height; 

    Object.defineProperty(this, 'height', { 
     enumerable: false 
    , configurable: true 
    , writable: false 
    , get: function(){return _height;} 
    , set: function(val){_height = val;} 
    }); 
} 

var에 myPlayer = 새로운 플레이어 (10);

defineProperty 옵션의 writable 속성이 false로 설정되어 있지만, 나는 다음과 같은 오류가 발생합니다 :

Invalid property. A property cannot both have accessors and be writable or have a value, #<Object>

writable은 물론 true로 설정하면 같은 일이 일어나고

하지만 오류 writable 행을 삭제하면 사라집니다.

제가 잘못했거나 버그입니까? 이 Object.definePropertyMozilla MDN이 명확히, 구글 크롬에 버전 30.0.1599.66

+1

오류가 설명이 ... 왜 쓰기 권한이없는 속성에 대한 getter 및 setter가 있습니까? – elclanrs

+1

이 오류는'writable : true'와'writable : false' 둘 다에 표시됩니다. 이 이상하지 않니? – Loupax

+1

'writable'과'value' 또는'get'과'set' 속성 만 가질 수 있습니다. '쓰기 가능 '을 지정 했으므로'get' 또는'set'을 사용할 수 없습니다. [Mozilla MDN] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty)를 참조하십시오. –

답변

32

일어나고 :

  • writablevalue :

    Property descriptors present in objects come in two main flavors: data descriptors and accessor descriptors. A data descriptor is a property that has a value, which may or may not be writable. An accessor descriptor is a property described by a getter-setter pair of functions. A descriptor must be one of these two flavors; it cannot be both.

    이 당신도 그 중 하나를 사용할 수 있음을 의미

  • getset

하지만 어떤 조합으로도 사용할 수 없습니다. 귀하의 예에서는 writable 속성을 지정합니다. 즉, 데이터 설명 자로, getset 속성을 허용하지 않습니다.

관련 문제