4

如何定义一个以后可以实例化的类?

我使用 jquery 为自己编写了一个旋转器类,如下所示:

var Rotator =
{
Loop: null,

init: function(identifierName)
    {
    ........
    }
}

如果我想在我的页面上有一个旋转器,那很好。我只是打电话Rotator.init(),它已经准备好了。但是,当我想要 3 个旋转器时,我必须定义 3 次整个类代码更改其名称。

如果我能做到,那就容易多了

  Instance1 = new rotator;
  Instance2 = new rotator;
  Instance3 = new rotator;
4

2 回答 2

3

以下是您的对象文字可能看起来像一个可以多次实例化的可重用命名函数:

var Rotator = function(name) {
    this.Name = name;
    this.Loop = null;

    this.init = function(identifierName)
    {
        this.Name = identifierName;
    };
};

// usage:

var foorotator = new Rotator('foo');
var barrotator = new Rotator('bar');

alert(foorotator.Name);
alert(barrotator.Name);

http://jsfiddle.net/JzWCL/

编辑后:

http://jsfiddle.net/mPzsq/

于 2013-03-29T18:10:47.477 回答
2

对于只使用一次的类对象,Xander 的解决方案看起来是一种可接受的形式。但是,如果您计划对其进行子类化或多次实例化,则应将方法应用于原型,而不是在主类(构造函数)函数中定义它们。例如:

var Rotator = function(name) {
    //run your initialization logic inside this constructor function
    this.Name = name;
    this.Loop = null;
}

Rotator.prototype.someMethod = function() {
    //method code
}

var rotator1 = new Rotator('foo');
var rotator2 = new Rotator('bar');

使用这种结构的原因是为了防止每次实例化类时都重构方法。通过将方法应用于原型,它们将在类的所有实例之间共享。

我发现这对 JavaScript 类定义的一些基础知识很有帮助: 3 Ways to Define a JavaScript Class

于 2013-03-29T18:27:29.937 回答