我有两个对象,Person和Person1,我试图理解为什么我无法将person1.getName绑定为在Person对象中使用不同的methodName。如果我使用下面的代码并在控制台中运行它,则输出为

名称:undefined undefined

这是我的代码:

var Person = {
  firstname : "John",
  lastName : "Doe",
  getFullName : function() {
    console.log("Name : " + this.firstname + " " + this.lastName);
  }
};

var Person1 = {
  firstname : "Jane",
  lastName : "Doe",
  Person1.getName : Person.getFullName.bind(Person1)
}

Person1.getName();


但是,如果我从Person1对象文字中删除该方法,然后在该方法在以下代码中正常运行的事实之后添加它:

var Person = {
  firstname : "John",
  lastName : "Doe",
  getFullName : function() {
    console.log("Name : " + this.firstname + " " + this.lastName);
  }
};

var Person1 = {
  firstname : "Jane",
  lastName : "Doe"
}

Person1.getName = Person.getFullName.bind(Person1);
Person1.getName();

最佳答案

提升var Person1,并定义Person1变量,但在评估undefined时等于Person.getFullName.bind(Person1)

由于this的工作方式,该方法不需要绑定(除非它与其上下文分开使用,例如用作回调)。

它应该是:

var Person1 = {
  firstname : "Jane",
  lastName : "Doe",
  getName : Person.getFullName
}

09-18 13:18