一尘不染

JS对象this.method()通过jQuery中断

json

我敢肯定有一个简单的答案,但是今天是星期五下午,我很累。:(

不知道如何解释它,所以我将继续发布示例代码…

这是一个简单的对象:

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也不起作用。

那么,如何以一种允许jQuery调用它并允许该对象与调用jQuery对象一起工作的方式引用该对象自身的属性呢?

即我希望能够做这样的事情:

doSomething : function()
    {
        console.log( <CurrentObject>.Stuff + $j(<CallerElement>).attr('id') );
    }

(其中<CurrentObject><CallerElement>用适当的名称替换。)


阅读 293

收藏
2020-07-27

共1个答案

一尘不染

的身份this是javascript中的常见问题。如果您尝试创建快捷方式doSomething

var do = Bob.doSomething;
do(); // this is no longer pointing to Bob!

最好不要依赖的身份this。您可以通过多种方式来执行此操作,但是最简单的方法是显式引用Bob而不是this内部doSomething。另一种方法是使用构造函数(但是您将失去很酷的对象文字语法):

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();
2020-07-27