2013-10-13 21 views
12

Ben belirleyiciler ve alıcılar ile bir nesne oluşturmak için çalışıyorum ve bu benim kodudur:Google Chrome Object.defineProperty'de yanlış davranış var mı?

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 = new Oyuncu (10);

defineProperty seçeneklerinin writable özelliği false olarak ayarlanmış olsa bile, aşağıdaki hatayı alıyorum:

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

writable elbette true ayarlandığında aynı oluyor

, ancak hata writable satırını kaldırırsam kaybolur.

Yanlış bir şey yapıyorum mu, yoksa bu bir hata mı? Bu Object.defineProperty için Mozilla MDN bu açıklık, Google Chrome'da Sürüm 30.0.1599.66

+1

Hata tanımlayıcı görünüyor ... Yazılabilir olmayan bir özellik için neden bir getter ve ayarlayıcınız var? – elclanrs

+1

Her iki durumda da hata görüntüleniyor, yazılabilir: true ve yazılabilir: false. Bu garip değil mi? – Loupax

+1

Sadece “yazılabilir” ve “değer” veya “get” ve “set” niteliklerine sahip olabilirsiniz. Yazılabilir 'seçeneğini belirttiğinizden,' get 'veya 'set' kullanamazsınız. Bkz. [Mozilla MDN] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty) –

cevap

32

oluyor:

  • writable ve value:

    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.

    Bu ya onlardan biri kullanabileceği anlamına gelir

  • ve set

Ancak bunların herhangi bir bileşimini kullanamazsınız. Örneğinizde, writable özniteliğini belirtin. Bu, get ve set özniteliklerine izin vermeyen bir veri tanımlayıcısı olduğu anlamına gelir.