Meine Gewohnheit ist es, die Funktion meinName() als Eigentumsspeicher, und dann var meinName als Inhaber der "Methode"...
Ob das legitim genug ist oder nicht, sei dahingestellt! Ich verlasse mich die ganze Zeit auf meine PHP-Logik, und die Dinge funktionieren einfach :D
function myObj() {
this.prop1 = 1;
this.prop2 = 2;
this.prop3 = 'string';
}
var myObj = (
(myObj instanceof Function !== false)
? Object.create({
$props: new myObj(),
fName1: function() { /* code.. */ },
fName2: function() { /* code ...*/ }
})
: console.log('Object creation failed!')
);
if (this !== that) myObj.fName1(); else myObj.fName2();
Sie können es auch umgekehrt machen, um vor der Objekterzeugung zu prüfen, d.h. viel besser :
function myObj() {
this.prop1 = 1;
this.prop2 = 2;
this.prop3 = 'string';
}
var myObj = (
(typeof(myObj) !== "function" || myObj instanceof Function === false)
? new Boolean()
: Object.create({
$props: new myObj(),
init: function () { return; },
fName1: function() { /* code.. */ },
fName2: function() { /* code ...*/ }
})
);
if (myObj instanceof Boolean) {
Object.freeze(myObj);
console.log('myObj failed!');
debugger;
}
else
myObj.init();
Bezugnahme auf dies: _JavaScript: Objekt erstellen mit Object.create()_
21 Stimmen
Ich kann sehen, wo Sie mit der Überprüfung gehen, um zu sehen, wenn der Namespace genommen wird, aber da das Objekt nicht erstellt werden, wenn dies fehlschlägt, denke ich, der bessere Ansatz ist zu warnen, wenn der Namespace genommen wird. Offen gesagt sollte dies einfach nicht in den meisten JS-Situationen passieren und sollte schnell in der Entwicklung gefangen werden.
19 Stimmen
Nehmen Sie einen "Namespace" der obersten Ebene (Fenstereigenschaft). Besitzen Sie ihn. Konflikte sollten bereits in der Testphase erkannt werden. Machen Sie sich nicht die Mühe, all diese "Was wäre wenn"-Prüfungen hinzuzufügen. Es ist ein fatales Problem für doppelte "Namensräume" und sollte als solches behandelt werden . Sie können einen Ansatz wie jQuery verfolgen, um das Bewohnen eines benutzerdefinierten "Namespace" zu ermöglichen; aber dies ist immer noch eine Frage der Entwurfszeit.
0 Stimmen
Siehe auch stackoverflow.com/questions/2102591/ bei Leistungsproblemen
0 Stimmen
Siehe auch stackoverflow.com/questions/4125479/ für Objekt- und Funktionsnamensräume
0 Stimmen
Dies ist eine Tonne von Informationen, aber wirklich legt die Unterschiede zwischen den verschiedenen JS Design Patterns. Es half mir eine Menge: addyosmani.com/resources/essentialjsdesignpatterns/book
1 Stimmen
Meh, heutzutage haben wir Symbole und Module, so dass doppelte Namespaces nicht einmal ein Problem sein sollten.