每次有人点击按钮时我都需要创建一个对象:
var button = document.getElementsByTagName('button')[0];
button.onclick = function() {
new testobj(args);
}
function testObj(args) {
}
testObj.protoype.method = function() {
//...
}
但每次单击按钮时继续创建新对象似乎很浪费(主要是因为该对象只接收一个值并对其执行某些操作然后返回)。我想知道是否有一种方法可以在第一次单击按钮时创建对象,然后在后续单击时再次以某种方式再次运行该对象...
所以我尝试了这个:
var testobj;
function test(thing) {
var self = this;
if(!testobj) {
testobj = new thing(thing);
} else {
testobj(thing);
}
};
这只是将对象分配给testobj var第一次运行test()运行...之后我只是尝试再次调用testobj ...但是我得到一个对象不是函数错误错误。完整测试http://jsfiddle.net/pstbj/1/
我理解为什么我会收到错误,因为testobj是一个对象而不是一个函数。有没有办法让我按照自己的意愿工作...所以我只创建一次对象。
或者创建一个新对象并不是那么糟糕......我在想,不必要地继续创建对象并不是一个好习惯吗?我想我需要缓存对象......
答案 0 :(得分:1)
这是因为new thing()
返回一个常规对象,而不是一个函数。
你应该做的只是在初始化后使用对象。
var my_object;
function Thing() {
this.thing = 'a sentence';
console.log('calling');
}
Thing.prototype.amethod = function() {
this.thing = 'a method of thing'
}
// new test(); // not necessary
var button = document.getElementsByTagName('button')[0];
button.onclick = function() {
if (!my_object)
my_object = new Thing();
// do some work with my_object
}
答案 1 :(得分:1)
只有在实例化对象时才调用构造函数。如果要重用该对象,则需要在第一次实例化它(进行初始化),然后为实际工作调用实例方法“
var testobj;
function test(thing) {
var self = this;
if(!testobj) {
testobj = new testObj();
}
testobj.someMethod(thing);
};
但是除非你的构造函数真的很贵,否则我不会担心响应用户点击并跳过缓存的性能。