Javascript JS在对象内使用bind to函数传递参数以访问对象范围内的特定变量的最佳实践
如果将绑定传递到对象a上的calculate(z)中,该绑定是否被视为范围x的适当“最佳实践”Javascript JS在对象内使用bind to函数传递参数以访问对象范围内的特定变量的最佳实践,javascript,inheritance,Javascript,Inheritance,如果将绑定传递到对象a上的calculate(z)中,该绑定是否被视为范围x的适当“最佳实践” var a = { x: 10, calculate: function(z){ return this.x + this.y + z; } }; a.calculate.bind({x:a.x, y:3})(10); // 23 不,使用a.calculate.bind({x:a.x,y:3})(10)不是最佳实践。您正在寻找: 不,使用a.calcula
var a = {
x: 10,
calculate: function(z){
return this.x + this.y + z;
}
};
a.calculate.bind({x:a.x, y:3})(10); // 23
不,使用
a.calculate.bind({x:a.x,y:3})(10)
不是最佳实践。您正在寻找:
不,使用
a.calculate.bind({x:a.x,y:3})(10)
不是最佳实践。您正在寻找:
箭头函数
calculate:(z)=>{…}
是进行绑定的简单方法…这个.x
已经10
没有绑定了,不是吗?为什么不把y
作为一个参数呢?我不理解对象与x
属性和绑定的混合。@GetOffMyLawn你是什么意思?箭头函数特别不绑定此。还有,这对OP有什么帮助呢?a.calculate.bind({y:3})
返回一个函数,它的this
是{y:3}
,这会导致this.x==未定义的@GetOffMyLawn不,它不会。如果calculate
是一个箭头函数,那么它的this===window
箭头函数calculate:(z)=>{…}
是一种简单的绑定方法…this.x
已经10
没有绑定了,不是吗?为什么不把y
作为一个参数呢?我不理解对象与x
属性和绑定的混合。@GetOffMyLawn你是什么意思?箭头函数特别不绑定此
。还有,这对OP有什么帮助呢?a.calculate.bind({y:3})
返回一个函数,它的this
是{y:3}
,这会导致this.x==未定义的@GetOffMyLawn不,它不会。如果calculate
是一个箭头函数,那么它的this==window
为什么用.call语法返回NaN?如果属性多于x
,可能是a.calculate.call(Object.assign({},a,{y:3}),10)
?或者a.calculate.call({…a,y:3},10)
如果支持ES2018。@jremi根据您当前的代码,Bergi的答案返回23
,而不是NaN
。这是正确的。必须使用正则函数(z){}。。。如果使用(z)=>{}fat箭头fails@jremi是的,没错。当处理此
时,箭头函数和常规函数不可交换。为什么它会用.call语法返回NaN?如果属性多于x
,可能是a.calculate.call(Object.assign({},a,{y:3}),10)
?或者a.calculate.call({…a,y:3},10)
如果支持ES2018。@jremi根据您当前的代码,Bergi的答案返回23
,而不是NaN
。这是正确的。必须使用正则函数(z){}。。。如果使用(z)=>{}fat箭头fails@jremi是的,没错。处理此时,箭头函数和常规函数不能互换。
a.calculate.call({x:a.x, y:3}, 10)