Javascript JS在对象内使用bind to函数传递参数以访问对象范围内的特定变量的最佳实践

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

如果将绑定传递到对象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.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)