Function.prototype.call不会使用提供的上下文调用方法

时间:2017-11-29 10:40:26

标签: javascript function.prototype

var userData = {
    id: 2,
    name: 'Tim'
}

function Userdata( id, name) {
    this.id = id;
    this.name = name;
    this.getData = () => { 
        console.log('Name: ' + this.name + ' and Id ' + this.id ) 
      }
}

var ud = new Userdata(1, 'Tom');
ud.getData.call(userData);

输出:姓名:Tom和Id 1(为什么)

我虽然ud.getData。调用(userData)会在调用函数时将其设置为userData,但这不会发生。

repl here

2 个答案:

答案 0 :(得分:4)

箭头功能没有自己的this,他们始终靠近他们定义的this,因此他们可以使用#{1}}。将忽略他们被调用的方式指定的任何this(无论是通过call还是apply)。

答案 1 :(得分:1)

使用常规功能:

var userData = {
  id: 2,
  name: 'Tim'
}

function Userdata(id, name) {
  this.id = id;
  this.name = name;
  this.getData = function() {
    console.log('Name: ' + this.name + ' and Id ' + this.id)
  };
}

var ud = new Userdata(1, 'Tom');
ud.getData.call(userData);