我经常看到这种模式
(function(){}).call(this)
和这个一样吗?
(function(that){})(this)
提前致谢
编辑
这两个代码是否试图解决同一个问题?这是什么背景?
编辑
任何人都可以编辑标题并提供更好的原因,我认为这很有趣。
我经常看到这种模式
(function(){}).call(this)
和这个一样吗?
(function(that){})(this)
提前致谢
编辑
这两个代码是否试图解决同一个问题?这是什么背景?
编辑
任何人都可以编辑标题并提供更好的原因,我认为这很有趣。
不,不是,另一个给函数一个对象上下文,另一个传递一个没有任何对象上下文的参数。
想象一个通用函数,例如Array#shift()
:
var shift = Array.prototype.shift;
//Shift expects an object context, and cannot be called without one.
//so this won't work:
shift($("div"))
//undefined
//This does:
shift.call($("div"))
//<div id="notify-container"></div>
这两个代码是否试图解决同一个问题?这是什么背景?
是的,但方式不同。
第一个版本调用Function.prototype.call
which 作为第一个参数,接受被this
调用函数上下文中的变量将引用的上下文对象。
第二个版本只是自调用匿名函数并将引用的对象this
(在调用上下文中)传递给匿名函数。现在,在被调用的匿名函数上下文中,我们可以通过that
. this
will be global
or undefined
(取决于 ES5 严格模式)
问题后编辑:
不。Function.prototype.call接受this
作为它的第一个参数。this
在这种情况下,不会作为真正的参数传递给函数。this
但是,您可以像that
在第二个函数中那样处理实际传递的问题。
编辑:这是一个例子。
MyObject = {};
MyObject.prototype.myMethod = function(value) { console.log("Hello, " + value); }
var obj = new MyObject();
function myMethodCaller(value)
{
this.myMethod(value);
}
myMethodCaller("World!");
myMethodCaller.call(obj, "World!");
this
(接收者)通常是没有该方法的window
(更一般地说,全局对象,无论它在您的上下文中是什么。它是不同的,例如工人)myMethod
。this
将指向,将在其上调用obj
该方法。myMethod