Lassen Sie uns den folgenden Code nehmen:Ist es möglich, Object.defineProperties mit Symbolen zu verwenden?
var obj = {};
var x = Symbol();
Object.defineProperties(obj, {
[x]: {
value: true,
writable: true
},
"property2": {
value: "Hello",
writable: false
}
// etc. etc.
});
console.log(obj[x])
diese gültig ist?
Mit dem nativen Object.defineproperties Code erhalten wir in der console.log true.
Mit dem polyfill von zone.js
, die von der Form ist:
Object.defineProperties = function (obj, props) {
Object.keys(props).forEach(function (prop) {
Object.defineProperty(obj, prop, props[prop]);
});
return obj;
};
wir für den gleichen Code von console.log undefined bekommen.
Dies liegt an der Funktion Object.keys. Ich habe gegoogelt und nirgendwo gefunden, ob das erlaubt sein sollte oder nicht.
Syntaktisch ist es gültig, praktisch ist es wie jeder andere Objektschlüssel in eine Zeichenkette umgewandelt wird, wie 'Symbol()' (das wäre in diesem Fall der genaue Schlüsselname). Wenn Sie wirklich nach einem beliebigen Objekt einen Schlüssel eingeben wollen - benutzen Sie die ES2015 'Map()' – zerkms
Uh, definieren Sie hier keine Eigenschaft ** auf **? – Bergi