javascript – jQuery如何劫持“这个”?

前端之家收集整理的这篇文章主要介绍了javascript – jQuery如何劫持“这个”?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我只是想知道jQuery如何能够在 Javascript中劫持’this’关键字.从我正在阅读的书中可以看出:“Javascript the Definitive Guide”它指出“this”是一个关键字,你不能像标识符那样改变它.

现在,假设您在自己的对象构造函数中并且调用了一些jQuery代码,它是如何从您那里劫持的?

function MyObject(){
    // At this point "this" is referring to this object
    $("div").each(function(){
        // Now this refers to the currently matched div
    });
}

我唯一的猜测是,因为你提供了对jQuery each()函数的回调,你现在正在使用一个具有jQuery作用域链的闭包,而不是你自己的对象的作用域链.这是正确的轨道吗?

谢谢

解决方法

您可以通过使用.call()或.apply()调用函数来更改函数的上下文(即此值),并将您的预期上下文作为第一个参数传递.

例如.

function fn() {
    return this.foo;
}

fn.call({foo:123}); // => 123

注意:将null传递给call或apply会使上下文成为全局对象,或者在大多数情况下是窗口.

值得注意的是.apply()和.call()之间的区别.前者允许您将一堆参数传递给它作为数组应用的函数,而后者允许您在上下文参数之后将它们作为常规参数添加

someFunction.apply( thisObject,[1,2,3] );
someFunction.call( thisObject,1,3 );

来自jQuery源码:

for ( var value = object[0];
      i < length &&
      callback.call( value,i,value ) // <=== LOOK!
      !== false;
      value = object[++i] ) {}

猜你在找的jQuery相关文章