Я пытаюсь создать объект с сеттеров и добытчиками, и это мой код:Неверное поведение в Google Chrome 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;}
});
}
вар myPlayer = новый плеер (10);
Даже несмотря на то, writable
свойство опций defineProperty устанавливается в ложь, я получаю следующее сообщение об ошибке:
Invalid property. A property cannot both have accessors and be writable or have a value, #<Object>
То же самое происходит, когда writable
установлена истина, конечно, но ошибка исчезает, если я удалю линию writable
.
Я делаю что-то неправильно или это ошибка? Это происходит на Google Chrome, версия 30.0.1599.66
Ошибка кажется описательной ... Почему у вас есть геттер и сеттер для свойства, недоступного для записи? – elclanrs
Ошибка отображается в обоих случаях: «writeable: true» и «writeable: false». Разве это не странно? – Loupax
Вы можете использовать либо атрибуты 'writable', и' value', или 'get' и' set', а не любую их смесь. Поскольку вы указываете 'writable', вы не можете использовать' get' или 'set'. См. [Mozilla MDN] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty) –