如何创建一个javascript类或模块,我需要在一个页面上有两个实例
我正在包装将在页面上的元素上工作的常见javascript函数 我的页面有两个这样的元素(textareas),因此我需要创建两个实例,然后我想这样做:如何创建一个javascript类或模块,我需要在一个页面上有两个实例,javascript,jquery,Javascript,Jquery,我正在包装将在页面上的元素上工作的常见javascript函数 我的页面有两个这样的元素(textareas),因此我需要创建两个实例,然后我想这样做: var textArea1 = new SomeClass(); var textArea2 = new SomeClass(); textArea1.init("ta1"); textArea2.init("ta2"); 我试着用模块模式的方式来做这件事,但我不知道如何创建它的两个独立实例 var MYMODULE = function(
var textArea1 = new SomeClass();
var textArea2 = new SomeClass();
textArea1.init("ta1");
textArea2.init("ta2");
我试着用模块模式的方式来做这件事,但我不知道如何创建它的两个独立实例
var MYMODULE = function() {
var _init = function(ta) {
// ..
}
return {
init: function(ta) {
_init(ta);
}
};
}();
使用您的特定示例,您可以只使用MYModule两次,但这是一种奇怪的模式,似乎没有起到很多作用 实例化工作原理的简单示例:
function SomeClass() {
// constructor
}
SomeClass.prototype.init = function(ta) {
// ..
}
var textArea1 = new SomeClass();
var textArea2 = new SomeClass();
textArea1.init('ta1');
textArea2.init('ta2');
但不管怎样,您可能喜欢Backbone.js使用您的特定示例,您可以只使用MYModule两次,但这是一种奇怪的模式,似乎没有做很多事情 实例化工作原理的简单示例:
function SomeClass() {
// constructor
}
SomeClass.prototype.init = function(ta) {
// ..
}
var textArea1 = new SomeClass();
var textArea2 = new SomeClass();
textArea1.init('ta1');
textArea2.init('ta2');
但不管怎样,你可能喜欢Backbone.js,你的MYMODULE想法会很好地发挥作用。如上所述,然后
MYMODULE.init("ta1");
MYMODULE.init("ta2");
这里的这一行不在乎它是用两个不同的参数调用的
var _init = function(ta) {
// ..
}
这只是一个举行活动的地方。真正的问题是该函数内部是什么。
例如,如果它以某种标准方式与ta一起工作(附加事件处理程序,进行一些样式设置…),那么它将不会成为问题。问题在于,如果您使用MYMODULE局部变量,并且希望有多个局部变量。您只有一个MYMODULE,因此本地变量将与此设计共享。这可能是你想要的。我不确定
对于传入的控件,该模式可以很好地工作,该控件本身具有特殊数据。最好的方法是使用jQuery,因为使用的是数据函数。。。因此,代码可能看起来像:
var _init = function(ta) {
jQuery.data(ta,"foo", 10);
// etc
}
你的MYMODULE想法会很好的。如上所述,然后
MYMODULE.init("ta1");
MYMODULE.init("ta2");
这里的这一行不在乎它是用两个不同的参数调用的
var _init = function(ta) {
// ..
}
这只是一个举行活动的地方。真正的问题是该函数内部是什么。
例如,如果它以某种标准方式与ta一起工作(附加事件处理程序,进行一些样式设置…),那么它将不会成为问题。问题在于,如果您使用MYMODULE局部变量,并且希望有多个局部变量。您只有一个MYMODULE,因此本地变量将与此设计共享。这可能是你想要的。我不确定
对于传入的控件,该模式可以很好地工作,该控件本身具有特殊数据。最好的方法是使用jQuery,因为使用的是数据函数。。。因此,代码可能看起来像:
var _init = function(ta) {
jQuery.data(ta,"foo", 10);
// etc
}
使用构造函数:
function SomeClass(id) {
this.id = id;
// ...
}
用法:
var textArea1 = new SomeClass("ta1");
var textArea2 = new SomeClass("ta2");
var text = testArea1.getValue();
您可以将类的方法放入函数的原型中。例如:
SomeClass.prototype = {
getValue: function() { return document.getElementById(this.id).value; }
};
用法:
var textArea1 = new SomeClass("ta1");
var textArea2 = new SomeClass("ta2");
var text = testArea1.getValue();
使用构造函数:
function SomeClass(id) {
this.id = id;
// ...
}
用法:
var textArea1 = new SomeClass("ta1");
var textArea2 = new SomeClass("ta2");
var text = testArea1.getValue();
您可以将类的方法放入函数的原型中。例如:
SomeClass.prototype = {
getValue: function() { return document.getElementById(this.id).value; }
};
用法:
var textArea1 = new SomeClass("ta1");
var textArea2 = new SomeClass("ta2");
var text = testArea1.getValue();
谢谢,在prototype块中,我可以调用我在另一个函数中定义的函数吗?@codecompleting:不,在另一个函数中定义的函数是本地函数,并且只存在于该函数中,因此任何解决方案都不能这样做。谢谢,在prototype块中,我可以调用我在另一个函数中定义的函数吗?@codecompleting:不,在另一个函数中定义的函数是局部函数,并且只存在于该函数中,因此任何解决方案都不能这样做。嗨,是的,我的模块中有局部变量,这就是引发我的问题的原因,实际上好像有什么东西要崩溃了。好吧,我不能就如何做我看不见的事情提供建议——如果你展示一些代码,那么我可能可以帮助建议一种模式。现在我只知道你想做一些事情。但是如果你使用jQuery,我希望你最好的选择是使用传入的控件的“数据”区域——我将在上面发布一个例子。嗨,是的,我的模块中确实有局部变量,这就是触发我的问题的原因,实际上好像有什么东西要坏了。好的,我不能提供关于如何做我看不见的事情的建议——如果您展示一些代码,那么我可能可以帮助您提出一种模式。现在我只知道你想做一些“事情”。但是如果你使用jQuery,我希望你最好的选择是使用传入控件的“数据”区域——我将在上面发布一个示例。backbone.js与此有什么关系?或者这是一个笑话??不,很明显,您正在处理应用程序结构,甚至将其标记为“jQuery”。如果你想用一种干净的方式来设计你的应用程序,最好使用主干网之类的东西,而不是试图重新发明轮子,从头开始自己编写所有的东西。主干网和主干网有什么关系?或者这是一个笑话??不,很明显,您正在处理应用程序结构,甚至将其标记为“jQuery”。如果您想要一种干净的方法来设计您的应用程序,那么最好使用主干之类的东西,而不是尝试重新发明轮子,从头开始自己编写所有内容。