Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建一个javascript类或模块,我需要在一个页面上有两个实例_Javascript_Jquery - Fatal编程技术网

如何创建一个javascript类或模块,我需要在一个页面上有两个实例

如何创建一个javascript类或模块,我需要在一个页面上有两个实例,javascript,jquery,Javascript,Jquery,我正在包装将在页面上的元素上工作的常见javascript函数 我的页面有两个这样的元素(textareas),因此我需要创建两个实例,然后我想这样做: var textArea1 = new SomeClass(); var textArea2 = new SomeClass(); textArea1.init("ta1"); textArea2.init("ta2"); 我试着用模块模式的方式来做这件事,但我不知道如何创建它的两个独立实例 var MYMODULE = function(

我正在包装将在页面上的元素上工作的常见javascript函数

我的页面有两个这样的元素(textareas),因此我需要创建两个实例,然后我想这样做:

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”。如果您想要一种干净的方法来设计您的应用程序,那么最好使用主干之类的东西,而不是尝试重新发明轮子,从头开始自己编写所有内容。