实例化多个对象

时间:2012-12-17 09:33:57

标签: javascript object

在Javascript中,我正在创建一个这样的对象:

var testObject = {
    value: "this is my initial value",
    setup: function() {
        value: "foo"
    }
};

现在,我希望能够实例化这个对象,所以我正在尝试这个:

var myFirstObject  = new testObject();
var mySecondObject = new testObject();

这样当我调用.setup()时,它将仅为该引用的新创建的对象更改值。我怎样才能做到这一点?这段代码似乎不起作用。

5 个答案:

答案 0 :(得分:2)

您不实例化对象,实例化函数。

var testObject = function() {
  this.value = "this is my initial value";
  this.setup = function() {
    this.value = "foo";
  }
}

var myFirstObject = new testObject();
var mySecondObject = new testObject();

编辑: 根据您的评论,以下是使用此对象上的函数绑定到DOM的方法:

document.getElementById('idOfElem').addEventListener(
    'click', myFirstObject.clickHandler);

请记住,您无法保证点击处理程序将在您的对象上下文中执行(即在您的点击处理程序中,this可能不是您的testObject实例) 。如果你的clickHandler打算以任何方式修改对象的实例变量,最好确保上下文如下:

document.getElementById('el').addEventListener('click', 
    function() { 
        myObj.handleClick.apply(myObj, arguments);
    });

答案 1 :(得分:1)

您的代码存在很多问题。首先,您尝试通过调用构造函数来实例化某些东西。您的testObject不是函数,因此您会导致类型错误。您需要将testObject更改为以下内容:

var TestObject = function () {
    this.value = "this is my initial value";
};
TestObject.prototype.setup = function () {
    this.value = "foo";
};

请注意,我在该标识符中使用了大写T ...这只是构造函数的最佳实践。另请注意我是如何在setup上定义prototype方法的。这比将其定义为实例的属性(使用this.setup)要高效得多,因为在内存中只需要存在一个函数副本。

现在TestObject是一个函数,可以通过new运算符调用它来实例化它:

var myFirstObject = new TestObject();
var mySecondObject = new TestObject();

当您在setup的实例上调用TestObject方法时,它将应用于该实例。换句话说,this方法中setup的值将引用调用该方法的实例:

myFirstObject.setup();
console.log(myFirstObject.value); // 'foo'
console.log(mySecondObject.value); // 'this is my initial value'

答案 2 :(得分:1)

您错误地定义了构造函数。试试这个:

function testObject() {
    this.value = "this is my initial value";
    this.setup = function() {
        this.value = "foo"
    }
};

然后,您可以拨打new testObject()

答案 3 :(得分:0)

您使用的对象表示法是可以与静态类进行比较的对象。 以下是您要实现的目标的代码:

var testObject = function(val) {
    this.value = "This is my initial value",

    if (arguments[0]) {
        this.value = val;
    }
};

var first = new testObject(); //uses initial value
var second = new testObject("hi"); //value = hi

如果您想使用此表示法编写课程,请查看以下内容:http://ejohn.org/blog/simple-javascript-inheritance/

答案 4 :(得分:0)

function yourObject(value, setup) {
        return {
            value: value,
            setup: setup
        };
}

var myFirstObject = new yourObject('a', function(){});
var mySecond = new yourObject('b', function(){});