Javascript 这个代码是做什么的?
我知道这是一个绑定函数。但是我不理解它和它在做什么,特别是Javascript 这个代码是做什么的?,javascript,Javascript,我知道这是一个绑定函数。但是我不理解它和它在做什么,特别是args.concat部分。concat做什么?另外,什么是.bind方法做的.apply和.call不能做的?它似乎是一个for 但是我不理解它和它在做什么,特别是args.concat部分。康卡特做什么 连接两个或多个数组s(以及其他值到数组) 另外,.bind方法做了什么,.apply和.call做不了什么 它返回对函数的引用,其中this绑定到您想要的任何内容 Function.prototype.bind = function(
args.concat
部分。concat
做什么?另外,什么是.bind
方法做的.apply
和.call
不能做的?它似乎是一个for
但是我不理解它和它在做什么,特别是args.concat
部分。康卡特做什么
连接两个或多个数组
s(以及其他值到数组
)
另外,.bind
方法做了什么,.apply
和.call
做不了什么
它返回对函数的引用,其中this
绑定到您想要的任何内容
Function.prototype.bind = function() {
var _this = this,
original = _this,
args = Array.prototype.slice.call(arguments),
_obj = args.shift(),
func = function() {
var _that = _obj;
return original.apply(_that, args.concat(
Array.prototype.slice.call(
arguments, args.length)));
};
func.bind = function() {
var args = Array.prototype.slice.call(arguments);
return Function.prototype.bind.apply(_this, args);
}
return func;
};
它对于套用非常有用,例如返回一个已经设置了参数的函数(除了在
bind()
中设置this
,您还可以设置默认参数)。bind函数接受一个函数并确保它始终绑定到一个特定的this
值。最简单的例子是事件处理程序。默认情况下,事件处理程序的此
值绑定到窗口
。但是,假设您希望使用对象的方法作为侦听器,并在该侦听器中更改某些属性:
var newFn = fn.bind(['a', 'b', 'c']);
// This will call `fn()` with the above `Array` as `this`.
newFn('first arg', 'second arg');
在onload事件中,不再像预期的那样更改thing.answer
,window.answer
现在是42。因此,我们使用bind
:
var thing = {
answer : 4,
listener : function() {
this.answer = 42;
}
}
window.onload = thing.listener;
因此,
bind
返回一个函数,该函数在被调用时调用原始函数,但使用指定的this
值
[].concat
只是将参数添加到数组中-因此[].concat(5,4)
返回[5,4]
和[5,4]。concat([42])
返回[5,4,42]
。在本例中,它用于连接参数-您可以将参数传递给bind
函数,该函数将在调用函数时作为参数传递。连接的工作原理是,当您调用绑定函数时,现在传递的参数也会随之传递。bind
返回一个函数,call
和apply
调用一个函数,它们是不同的<代码>绑定用于确保以后将要使用的函数在特定上下文中调用,并可以选择将参数绑定到该函数。它的奇数部分(或不同部分)是向返回的函数添加一个.bind
属性func.bind=function(){…
因此,如果对由.bind()
生成的函数调用.bind()
,则原型.bind()
将被隐藏,并且它始终仅绑定到原始函数。这与标准的.bind()不同
…它还非常奇怪地复制了它的两个变量,以不同的名称引用同一项。它丢弃传递给绑定函数调用的参数,这些参数的索引与原始绑定参数相同。非常奇怪的函数。@patrick我立即注意到了重复。奇怪。
window.onload = thing.listener.bind(thing);