目前,我通过声明一个构造函数(普通函数)来在JavaScript中创建对象,然后像下面这样向原型添加方法:
function Test(){
}
Test.prototype.test1 = function(){
var me = this;
}
然而,我希望避免在每个函数的顶部声明var me = this
。下面的方法似乎可行,但似乎非常低效:
$(document).ready(function(){
var n = 0;
(function(){
function createTest(){
var me;
function Test(){
this.n = n;
this.testArr = [1, 2, 3, 4];
n++;
}
Test.prototype.test1 = function(){
me.test2();
};
Test.prototype.test2 = function(){
alert(me.n);
$.getJSON('test.php', {}, function(reply)
//want to be able to use 'me' here
me.newField = reply;
});
};
var t = new Test();
me = t;
return t;
}
window['createTest'] = createTest;
})();
var t = createTest();
t.test1();
var t2 = createTest();
t2.test1();
t.test1();
});
这段代码输出的结果是预期的,但它看起来真的像它看起来那样低效吗(每次调用createTest()都重新声明Test对象)?
总之,这似乎有点hacky...是否有完全不同的方法来做到这一点更好呢?
编辑:我想要这样做的真正原因是,像test2中的回调函数将引用正确的this
。