我敢肯定有一个简单的答案,但是今天是星期五下午,我很累。:(
不知道如何解释它,所以我将继续发布示例代码…
这是一个简单的对象:
var Bob = { Stuff : '' , init : function() { this.Stuff = arguments[0] } , doSomething : function() { console.log( this.Stuff ); } }
这里正在使用它:
$j = jQuery.noConflict(); $j(document).ready( init ); function init() { Bob.init('hello'); Bob.doSomething(); $j('#MyButton').click( Bob.doSomething ); }
一切正常,最后一行除外。当jQuery调用doSomething方法时,它会覆盖“ this”并使其停止工作。
尝试使用Stuff也不起作用。
Stuff
那么,如何以一种允许jQuery调用它并允许该对象与调用jQuery对象一起工作的方式引用该对象自身的属性呢?
即我希望能够做这样的事情:
doSomething : function() { console.log( <CurrentObject>.Stuff + $j(<CallerElement>).attr('id') ); }
(其中<CurrentObject>和<CallerElement>用适当的名称替换。)
<CurrentObject>
<CallerElement>
的身份this是javascript中的常见问题。如果您尝试创建快捷方式doSomething:
this
doSomething
var do = Bob.doSomething; do(); // this is no longer pointing to Bob!
最好不要依赖的身份this。您可以通过多种方式来执行此操作,但是最简单的方法是显式引用Bob而不是this内部doSomething。另一种方法是使用构造函数(但是您将失去很酷的对象文字语法):
Bob
var createBob = function() { var that = {}; that.Stuff = ''; that.init = function() { that.Stuff = arguments[0]; }; that.doSomething = function() { console.log( that.Stuff ); }; return that; } var bob = createBob();