Как установить Object.prototype.somefunction является `readonly`?
var obj = {};
console.log(obj.constructor === Object); // true
console.log(typeof obj.constructor); // function
obj['foo'] = 'bar';
obj['constructor'] = 'String';
console.log(obj.constructor === Object); // false
console.log(typeof obj.constructor); // string
Я хочу упомянуть случай в этом примере: В obj
объекте, я добавил новое имя свойства constructor
со значением String
. И тип значения - string
.
So: 'string' !== 'function'
.
Поскольку я переопределяю его как второй, я не могу использовать его как функцию в качестве первой.
Это также означает: некоторые разработчики js (почти) не хотят объявлять свойство, имя которого находится в объекте constructor
. Если я попытаюсь это сделать, значение constructor
будет отменено.
же в другом случае:
var array = [];
console.log(typeof array.forEach); // function
array['forEach'] = 'String';
console.log(typeof array.forEach); // string
Почему JS не принимает несколько ключей с одинаковыми именами, но разница типов значений?
То, что я хочу добиться:
var action = {
isDone: false,
isDone: function (flag) {
this.isDone = flag
}
};
action.isDone(progressing is done);
if (action.isDone) {
// done...
}
// 'boolean' !== 'function'
Мои вопросы:
1 /. Как определить новое свойство для объекта с тем же ключом? (не дублировать с другими темами, потому что same key but differnce value types
);
2 /. Это лучший способ предотвратить переопределение свойства объекта? (Или readonly
как название)
var obj = {};
Object.defineProperty(obj, 'constructor', {
get: function() {
return function() {
// default constructor here...
}
},
set: function (newValue) {
// do nothing here...
}
})
я происхожу из C# :( –