在Javascript中,如何在不绑定this参数的情况下将参数绑定到函数?
例如:
//Example function.
var c = function(a, b, c, callback) {};
//Bind values 1, 2, and 3 to a, b, and c, leave callback unbound.
var b = c.bind(null, 1, 2, 3); //How can I do this without binding scope?
Run Code Online (Sandbox Code Playgroud)
如何避免必须绑定函数范围的副作用(例如setting this= null)?
编辑:
对困惑感到抱歉.我想绑定参数,然后能够稍后调用绑定函数并使其行为与我调用原始函数并将其传递给绑定参数完全相同:
var x = 'outside object';
var obj = {
x: 'inside object',
c: function(a, b, c, callback) {
console.log(this.x);
}
};
var b = obj.c.bind(null, 1, 2, 3);
//These should both …Run Code Online (Sandbox Code Playgroud) 试着这样做:
var c = {
x: 'other context'
};
var o = {
x: 'this context',
get otherContext () {
alert(this.x);
}.bind(c)
};
o.otherContext;
Run Code Online (Sandbox Code Playgroud)
但我得到一个Syntax Error:
未捕获的SyntaxError:意外的令牌.
您可能会问,为什么我可能想要改变吸气剂的背景.在这里引导我的用例涉及创建一个将检索DOM属性的辅助对象.帮助器是在另一个对象中定义的,该对象持有对我需要属性的DOM元素的引用.所以,这个辅助对象实际上只是一些DOM方法的代理,真的,我会这样做:
var ViewObject = function () {
this.el = document.getElementById('id');
var proxy = {
...
get left() {
return this.el.offsetLeft
}.bind(this)
...
};
};
Run Code Online (Sandbox Code Playgroud)
恕我直言,这是一个非常有效的用例.并且具有父对象的this上下文的一个将是有用的.(也许代理功能可能更合适?嗯......我没有想到这一点.仍然是吸气剂是ES5,代理是ES6,只有常青树和Edge 13+实现,我认为在ES5的范围内问题仍然很非常适用.)
javascript ×2