Sie können alle Objekte erweitern und eine Erweiterung hinzufügen. Ich weiß, dass Leute dazu neigen, den Object-Prototyp für erweiterte Objektfunktionen zu missbrauchen, aber ich finde nichts leichter als das. Plus, es ist jetzt mit der Object.defineProperty Methode erlaubt.
Object.defineProperty(Object.prototype, "has", { value: function(needle) {
var obj = this;
var needles = needle.split(".");
for(var i = 0; i<needles.length; i++) {
if(!obj.hasOwnProperty(needles[i])) {
return false;
}
obj = obj[needles[i]];
}
return true;
}});
Um nun für jede Eigenschaft in einem Objekt zu testen, können Sie einfach tun:
if(obj.has("some.deep.nested.object.somewhere"))
Here's a jsfiddle es zu testen, und insbesondere enthält es einige jQuery, dass, wenn Sie das ändern bricht Object.prototype direkt, weil die Eigenschaft aufzählbar wird. Dies sollte mit Bibliotheken von Drittanbietern funktionieren.
nicht als Teil der Sprache, Nr. * Edit *, es sei denn, es gibt einen neuen Syntax-Trick, den ich vergesse. – Pointy
Nicht wirklich, aber es ist nicht so schwer zu schreiben – Icepickle
Willst du es 'undefined' zurückgeben, wenn eine dieser Eigenschaften nicht existiert? Denn das wirst du bekommen. Ich mag es, wenn möglich, leere Objekte zurückzugeben, so: 'return (((Config || {}). Einstellungen || {}). Group || {}) .theThingIReallyWanted || {}); ' – Chris