【发布时间】:2011-07-16 02:35:39
【问题描述】:
目前,我通过声明构造(常规函数)在 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 对象)?
Anyhoo,这似乎有点 hacky... 有没有更好的完全不同的方法来做到这一点?
编辑:我想这样做的真正原因是,像 test2 中的回调这样的回调将引用正确的 this。
【问题讨论】:
-
你应该阅读这个(请原谅双关语):bonsaiden.github.com/JavaScript-Garden/#function.this
-
信息量很大。非常感谢!哦,你的双关语被原谅了:)
标签: javascript oop closures javascript-objects