Wie setze ich Object.prototype.somefunction auf `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
Ich mag einen Fall, in diesem Beispiel nennen: Im obj
Objekt, Ich habe einen neuen Eigenschaftsnamen constructor
mit Wert String
hinzugefügt. Und die Art des Wertes ist string
.
So: 'string' !== 'function'
.
Da ich es als das zweite überschreibe, kann ich es nicht wie eine Funktion als erstes verwenden.
Das bedeutet auch: einige js Entwickler (fast) wollen keine Eigenschaft, die den Namen constructor
in einem Objekt zu deklarieren. Wenn ich das versuche, wird der Standardwert constructor
überschrieben.
Same auf einen anderen Fall:
var array = [];
console.log(typeof array.forEach); // function
array['forEach'] = 'String';
console.log(typeof array.forEach); // string
Warum akzeptiert keine js mehrere Schlüssel mit demselben Namen, aber Differenzwerttypen?
Was ich will, erreichen:
var action = {
isDone: false,
isDone: function (flag) {
this.isDone = flag
}
};
action.isDone(progressing is done);
if (action.isDone) {
// done...
}
// 'boolean' !== 'function'
Meine Fragen:
1 /. Wie definiere ich eine neue Eigenschaft für ein Objekt mit demselben Schlüssel? (nicht mit anderen Themen duplizieren, weil same key but differnce value types
);
2 /. Ist es der beste Weg zu verhindern, eine Objekteigenschaft zu überschreiben? (Oder readonly
als Titel)
var obj = {};
Object.defineProperty(obj, 'constructor', {
get: function() {
return function() {
// default constructor here...
}
},
set: function (newValue) {
// do nothing here...
}
})
Ich komme aus C# :( –