这个&绑定返回Undefined

时间:2017-10-12 18:27:08

标签: javascript

我觉得放弃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();




为什么这不会返回这个简单的计算?

6 个答案:

答案 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)