在对象字面量的方法内绑定对象 (ES5)

Binding an object inside of an object literal's method (ES5)

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

的输出

姓名:未定义未定义

这是我的代码:

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(); 
  1. 在对象字面量中,您不能引用对象将分配给的变量名。
  2. Person1.getName : Person.getFullName.bind(Person1) 不是在对象字面量中声明方法的正确语法。您在 var Person 中做对了。

您的代码必须是:

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

var Person1 被提升,并且 Person1 变量被定义但在计算 Person.getFullName.bind(Person1) 时等于 undefined

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

应该是:

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