У меня есть объект/функция/закрытие (я думаю, что все три?), И мне нужно применить отдельные экземпляры его к нескольким элементам на странице.
var NS = NS || {};
NS.PLAJAX = function(){
var pub = {};
var self = this;
pub.Init = function(FormRef){
// do stuff
};
self.aPrivateFunction = function(){
// do stuff
}
return pub;
}();
// Apply a *copy* to each element with the given class
$(function(){
$('.el-form-wrapper').each(function(index, Element){
// Attempt #1
NS.PLAJAX.Init(Element); // Doesn't make copies!
//OR, Attempt #2
var Newbie = new NS.PLAJAX(); // Throws a "not a constructor" error
Newbie.Init(Element);
});
});
Как я могу получить новый экземпляр этого замыкания/объекта для каждого элемента?
У вас есть только объект. Однако для использования new
ключевого слова вам нужна функция (конструктор).
Нет необходимости возвращать что-либо из конструктора. new
ключевое слово создает новый объект, вызывает функцию с этим новым объектом, как this
, а затем возвращает его. Публичным методам должны быть присвоены свойства this
(self
), а частные методы должны быть локальными переменными. То, что у вас получится, это примерно так:
var NS = NS || {};
NS.PLAJAX = function(){
var self = this;
self.Init = function(FormRef){
// do stuff
};
var aPrivateFunction = function(){
// do stuff
}
};
// Apply a *copy* to each element with the given class
$(function(){
$('.el-form-wrapper').each(function(index, Element){
var Newbie = new NS.PLAJAX();
Newbie.Init(Element);
});
});
я пробовал это, и это работает для меня, надеюсь, это будет работать для u
var NS = NS || {};
NS.PLAJAX = function(){
var pub = {};
var self = this;
pub.Init = function(FormRef){
alert(FormRef);
};
self.aPrivateFunction = function(){
alert("private");
}
return pub;
};
//доступ к объекту NS
$(function(){
$('.el-form-wrapper').each(function(index, Element){
var a=NS.PLAJAX();
console.log(typeof(a));
a.Init("gg"); // Doesn't make copies!
//OR, Attempt #2
var Newbie = new NS.PLAJAX(); // Throws a "not a constructor" error
Newbie.Init("ff");
});
});
см. демо
PLAJAX
больше не будет закрытием.aPrivateFunction
в каждом экземпляре PLAJAX. Почему вы думаете, что это не закрытие? Как вы думаете, закрытие?