我觉得放弃JS。我已经和它一起工作了大约一个月,甚至似乎也不明白为什么在学习this
& amp;& bind
想法:
var numbers = {
x: 'hi',
y: 'dawd',
z: 'ohgroe',
};
function calc() {
calc.bind(numbers);
return this.x + this.y + this.z;
}
calc();

为什么这不会返回这个简单的计算?
答案 0 :(得分:2)
bind
返回一个函数。它不会将对象绑定到当前函数。您需要使用calc.bind(numbers)()
或calc.call(numbers)
等内容。
这些调用需要在函数外部完成。这是一个例子:
var numbers = {
x: 'hi',
y: 'dawd',
z: 'ohgroe',
};
function calc() {
return this.x + this.y + this.z;
}
var result = calc.bind(numbers)();
// OR
// var result = calc.call(numbers);
console.log(result);

答案 1 :(得分:1)
this
将仅在numbers
的函数返回的调用中设置为.bind()
对象。它不会更改本地this
值。
我不确定在使用.bind()
时你最终得到的是什么,所以我不知道该解决方案的建议。也许描述一下你试图解决的原始问题。
答案 2 :(得分:0)
不是试图在函数调用本身中设置len(np.where(A*B == 1)[0])
,而是可以为函数定义预期参数
this

答案 3 :(得分:0)
它会起作用的一些方法:
function calc() {
return this.x + this.y + this.z;
}
console.log(calc.call(numbers));
//equals calc.bind(numbers)()
或与
一起使用function calc(){
with(numbers){
return x + y + z;
}
}
console.log(calc());
或传递数字:
function calc(nums){
return nums.x + nums.y + nums.z;
}
console.log( calc(numbers));
然后你可以直接为 n 值执行此操作:
fuction calc(nums){
return Object.values(nums).reduce((a,b) => a + b );
}
console.log(calc( {
a:1,b:4,c:5
}));
我想放弃JS
没有!不要这样做! JS是目前最酷的语言之一,即使它很难学习它也值得我保证;)
答案 4 :(得分:0)
function calc() {
calc.bind(numbers);
return this.x + this.y + this.z;
}
这会创建一个新的'这个'范围并将calc绑定到数字(这不执行计算,而是将数字绑定到其函数调用,这不会将其添加到此调用状态)。你对此的呼吁现在什么也没做。现在,如果你这样做
function calc() {
Object.assign(this, numbers);
return this.x + this.y + this.z;
}
X Y和Z绑定到范围。我不知道为什么你会这样做,为什么不这样做呢?
function calc(numbers) {
return numbers.x + numbers.y + numbers.z;
}
答案 5 :(得分:0)
首先,了解bind,call,apply非常重要。所有这些都让你控制了这个'这个'指向,但他们做的不同。
bind()返回函数的副本。
call()实际上执行的是函数,而不仅仅是创建一个副本,也可以传递参数..
apply()与call()相同,但在传入参数时采用数组。
考虑到这一点,您可以执行以下操作:
var numbers = {
x: 'hi',
y: 'dawd',
z: 'ohgroe',
};
function calc() {
return this.x + this.y + this.z;
}
var boundedCalc = calc.bind(numbers);
boundedCalc();
或
calc.call(numbers);
或
calc.apply(numbers)