D.C*_*.C. 8 javascript jquery this
我只是想知道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
});
}
Run Code Online (Sandbox Code Playgroud)
我唯一的猜测是,因为你提供了对jQuery each()函数的回调,你现在正在使用一个具有jQuery作用域链的闭包,而不是你自己的对象的作用域链.这是正确的轨道吗?
谢谢
Jam*_*mes 16
您可以this通过使用.call()或调用函数的上下文(即值)来更改函数的上下文,.apply()并将预期的上下文作为第一个参数传递.
例如
function fn() {
return this.foo;
}
fn.call({foo:123}); // => 123
Run Code Online (Sandbox Code Playgroud)
注意:传递null给任一个call或apply使上下文成为global对象,或者在大多数情况下window.
值得注意的是.apply()和之间的区别.call().前者允许您将一堆参数传递给它作为数组应用的函数,而后者允许您在上下文参数之后将它们作为常规参数添加:
someFunction.apply( thisObject, [1,2,3] );
someFunction.call( thisObject, 1, 2, 3 );
Run Code Online (Sandbox Code Playgroud)
来自jQuery源码:
for ( var value = object[0];
i < length &&
callback.call( value, i, value ) // <=== LOOK!
!== false;
value = object[++i] ) {}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
888 次 |
| 最近记录: |