在没有上下文参数的情况下调用本机绑定函数(function.prototype.bind)
Calling native bind function ( Function.prototype.bind ) without a context argument
我们为什么不能"not"定义Function.prototype.bind的第一个参数,并让它保留被调用的上下文。
我有一个用例,它非常有用,但它似乎传递null或undefined作为第一个参数,将输出函数绑定到Window。
另一种说法是,本机绑定的当前实现似乎不允许您不绑定函数的上下文,而只将参数前缀绑定到绑定的函数。
例如:
var a = function() {
this.foo = function() { console.log(this) };
this.foo = this.foo.bind(undefined,1);
};
var b = new a();
b.foo(); // Logs Window instead of the instance b;
这是在谷歌Chrome版本27.0.1453.116 m 中测试的
您需要创建自己的binder函数来实现这一点。产生.bind()
的主要原因是为了处理非词汇定义的this
。因此,在不设置this
的情况下,他们没有提供任何使用方法。
这里有一个你可以使用的简单例子:
Function.prototype.argBind = function() {
var fn = this;
var args = Array.prototype.slice.call(arguments);
return function() {
return fn.apply(this, args.concat(Array.prototype.slice.call(arguments)));
};
};
这是非常简单的,并且不处理作为构造函数调用的函数,但如果需要,可以添加这种支持。
您还可以增强它,使其表现得像本机.bind()
,除非将null
或undefined
作为第一个参数传递。
Function.prototype.argBind = function(thisArg) {
// If `null` or `undefined` are passed as the first argument, use `.bind()`
if (thisArg != null) {
return this.bind.apply(this, arguments);
}
var fn = this;
var args = Array.prototype.slice.call(arguments);
return function() {
return fn.apply(this, args.concat(Array.prototype.slice.call(arguments)));
};
};
相关文章:
- 如何向onClick事件处理程序传递一个接受参数的函数,并且仍然将该函数绑定到组件's”;这个“;上下文
- Jquery:将函数绑定到已绑定元素的点击事件
- 我可以通过使用函数绑定来保留默认值吗?如果没有,为什么
- 这在 Object 方法中不引用对象,而是引用函数绑定到的标记
- 为什么当我尝试将函数绑定到自身时,“this”对象仍然引用窗口
- 如何将函数绑定到使用链接函数创建 HTML 的角度指令
- 将jquery函数绑定到事件
- 将服务中的函数绑定到$scope(错误:无法设置undefined的属性'onChange')
- 使用闭包/函数绑定将自函数作为回调传递
- 如何在 Javascript 中将函数绑定到对象数据成员的更改
- 需要将内部函数绑定到元素的单击事件
- 在Javascript中将对象原型函数绑定到对象
- 将函数绑定到Twitter Bootstrap Modal Ajax Complete
- ng使用一个不识别临时变量形式ng repeat的函数绑定html
- 将函数绑定到baz后调用fn.apply(bar,[])
- 将函数绑定到采用参数的不同事件
- 如何将返回函数绑定到标记角度
- 在IE9中未检测到视图模型函数绑定,但在FF和Chrome中有效
- 如何将函数绑定到ShadowDOM内部的元素
- 将原型函数绑定到此的方式不那么冗长