Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.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_Object - Fatal编程技术网

Javascript 实例化多个对象

Javascript 实例化多个对象,javascript,object,Javascript,Object,在Javascript中,我创建了如下对象: var testObject = { value: "this is my initial value", setup: function() { value: "foo" } }; 现在,我希望能够实例化此对象,因此我尝试以下方法: var myFirstObject = new testObject(); var mySecondObject = new testObject(); 因此,当我调用.s

在Javascript中,我创建了如下对象:

var testObject = {
    value: "this is my initial value",
    setup: function() {
        value: "foo"
    }
};
现在,我希望能够实例化此对象,因此我尝试以下方法:

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

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

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

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

如果您想使用此符号编写类,请查看以下内容:

您使用的对象符号可以与静态类进行比较。 以下是您试图实现的目标的代码:

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

如果您想使用这种符号编写类,请看一下:

您不实例化对象,而是实例化函数

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);
请记住,您不能保证单击处理程序将在对象的上下文中执行(即,在单击处理程序中,
可能不是您的
测试对象
实例)。如果您的
clickHandler
打算以任何方式修改对象的实例变量,最好确保上下文如下:

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

你不是实例化对象,而是实例化函数

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);
请记住,您不能保证单击处理程序将在对象的上下文中执行(即,在单击处理程序中,
可能不是您的
测试对象
实例)。如果您的
clickHandler
打算以任何方式修改对象的实例变量,最好确保上下文如下:

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

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

var TestObject = function () {
    this.value = "this is my initial value";
};
TestObject.prototype.setup = function () {
    this.value = "foo";
};
注意,我在该标识符中使用了大写的
T
。。。这只是构造函数的最佳实践。还要注意我是如何在
原型
上定义
设置
方法的。这比将其定义为实例的属性(使用
This.setup
)要有效得多,因为内存中只需要存在函数的一个副本

既然
TestObject
是一个函数,可以通过使用
new
操作符调用它来实例化它:

var myFirstObject = new TestObject();
var mySecondObject = new TestObject();
TestObject
的实例上调用
setup
方法时,它将应用于该实例。换句话说,
setup
方法中的
this
的值将引用调用该方法的实例:

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

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

var TestObject = function () {
    this.value = "this is my initial value";
};
TestObject.prototype.setup = function () {
    this.value = "foo";
};
注意,我在该标识符中使用了大写的
T
。。。这只是构造函数的最佳实践。还要注意我是如何在
原型
上定义
设置
方法的。这比将其定义为实例的属性(使用
This.setup
)要有效得多,因为内存中只需要存在函数的一个副本

既然
TestObject
是一个函数,可以通过使用
new
操作符调用它来实例化它:

var myFirstObject = new TestObject();
var mySecondObject = new TestObject();
TestObject
的实例上调用
setup
方法时,它将应用于该实例。换句话说,
setup
方法中的
this
的值将引用调用该方法的实例:

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

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

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

然后,您可以调用
newtestobject()

如果您没有正确定义构造函数。试试这个:

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

然后您可以调用
newtestobject()

谢谢。我有一个小问题,不想就此提出新问题,但是,有没有办法将DOM事件绑定到这些对象中的函数?如果这不是一个快速的问题,那么我最好打开一个新的问题。谢谢。我有一个小问题,不想就此提出新问题,但是,有没有办法将DOM事件绑定到这些对象中的函数?如果这不是一个快速的问题,那么我最好打开一个新的问题。