下面是JS绑定的ES5垫片。我不理解绑定函数中的 self .apply。 我知道如何使用apply方法,但在这种情况下 self 指向哪里?它应该是一个 功能,但这里自我看起来像一个对象。
if ( !Function.prototype.bind ) {
Function.prototype.bind = function( obj ) {
var slice = [].slice,
args = slice.call(arguments, 1),
self = this,
nop = function () {},
bound = function () {
return self.apply( this instanceof nop ? this : ( obj || {} ), // self in this line is supposed
to // represent a function ?
args.concat( slice.call(arguments) ) );
};
nop.prototype = self.prototype;
bound.prototype = new nop();
return bound;
};
}
答案 0 :(得分:2)
self
正在您列出的垫片中使用,以适应this
随着范围更改而变化的事实。在Function.prototype.bind函数this
的直接范围内,将引用调用绑定函数的对象。
输入嵌套bound
函数的范围this
已更改;因此,作者已在self = this
函数中指定了bind
,以允许调用this
时bind
的值通过bound
函数保持可用词汇范围(闭包)。
在JavaScript中进行范围设计会变得相当复杂;有关详细说明,请查看本文。
答案 1 :(得分:-1)
请记住,在javascript 几乎中,一切都是对象。
所以你就在那里:
self = this
所以,self不是代表任何东西,self 是实例。