Я пытаюсь понять, как свойства объекта относятся к методам, определенным на прототипе объекта. Следующий код печатает «ECMA style 5», в то время как я ожидаю, что он напечатает «ECMA style 3».Разница между методом и свойством объекта в node.js
var util = require('util');
function MyError() { }
util.inherits(MyError, Error);
Object.defineProperty(MyError.prototype, 'toJSON', {
enumerable: false,
value: function() {
return 'ECMA5 style';
}
});
MyError.prototype.toJSON = function() {
return 'ECMA3 style';
}
var x = new MyError();
console.log(JSON.stringify(x));
Я читаю через статью 1, но я не могу, почему стиль обращал внимание на 3 не печатается, так как она определяется вторым в файле. Не следует ли переопределить существующее определение метода?
Я бегу узел v0.10.21
True .. возможно, подключите это ... https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty#Description – PSL
@conorgil Если вы запустите свой скрипт в [строгом режиме] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/Strict_mode) вы увидите, что присваивание 'ECMA3' действительно вызывает ошибку. –
Я запускал его в строгом режиме, и это действительно ошибка. Когда я добавил writeable: true для вызова в Object.defineProperty, тогда он работал, как я и ожидал. – conorgil