在Javascript中,我正在创建一个这样的对象:
var testObject = {
value: "this is my initial value",
setup: function() {
value: "foo"
}
};
现在,我希望能够实例化这个对象,所以我正在尝试这个:
var myFirstObject = new testObject();
var mySecondObject = new testObject();
这样当我调用.setup()
时,它将仅为该引用的新创建的对象更改值。我怎样才能做到这一点?这段代码似乎不起作用。
答案 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(){});