JS nesneleri tanımlama bu şekilde herhangi bir amacı var mı?
Bazı eski kod takınıyorum ve nesneleri tanımlamak için aşağıdaki Şablonu olduğunu fark ettim:
var MyObject = {};
(function (root) {
root.myFunction = function (foo) {
//do something
};
})(MyObject);
Bu herhangi bir amaç var mı? Sadece aşağıdakileri yapmakla eşdeğerdir?
var MyObject = {
myFunction : function (foo) {
//do something
};
};
Benim beğenisine bütün kod tabanı yeniden oluşturulması için kutsal bir macera atılmak üzereyim, ama gerçekten tanımlayan nesneleri bu dolambaçlı yolu arkasındaki nedeni anlamak istiyorum.
Teşekkürler!
CEVAP
Modül desen http://toddmotto.com/mastering-the-module-pattern/ deniyor
Ana nedeni gerçekten özel yöntemleri ve değişkenleri oluşturmak için. Sizin durumunuzda, herhangi bir uygulama ayrıntıları saklanıyor çünkü anlamlı değil.
İşte mantıklı modül desen kullanmak için yaptığı bir örnek.
var MyNameSpace = {};
(function(ns){
// The id variable is hidden from the outside world
var id = 0;
// So is this function
function adder(val) {
return val 1;
}
ns.getNext = function (val) {
return id = adder(val);
}
})(MyNameSpace);
var id = MyNameSpace.getNext(); // 1
var otherId = MyNameSpace.getNext(); // 2
var otherId = MyNameSpace.getNext(); // 3
Eğer sadece düz bir nesne kullanıldığında ise, adder id halka açık olacak
var MyNameSpace = {
id: 0,
adder: function(val) {
return val 1;
},
getNext: function() {
return this.id = this.adder(this.id);
}
}
Ve bir şeyler yaparak böyle kırabilirsin
MyNameSpace.getNext(); // 1
MyNameSpace.id = 0;
MyNameSpace.getNext(); // 1 again
delete MyNameSpace.adder;
MyNameSpace.getNext(); // error undefined is not a function
Ama modülü sürümü ile
MyNameSpace.getNext(); // 1
// Is not affecting the internal id, it's creating a new property
MyNameSpace.id = 0;
MyNameSpace.getNext(); // 2, yessss
// Is not deleting anything
delete MyNameSpace.adder;
MyNameSpace.getNext(); // no problemo, outputs 3

Klon için herhangi bir şekilde bir git...
bir WordPress kullanmak bir&; giriÅŸ>...
Bildirmek için herhangi bir şekilde bi...
Orada herhangi bir şekilde C# uzantısı...
Ant build.xml oluşturmak için herhangi...