绑定对象文字方法(ES5)中的对象

时间:2018-01-18 20:58:17

标签: javascript object binding literals ecmascript-5

我有两个对象,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(); 

2 个答案:

答案 0 :(得分:1)

  1. 在对象文字中,您无法引用将分配对象的变量名称。
  2. Person1.getName : Person.getFullName.bind(Person1)不是在对象文字中声明方法的正确语法。您正在var Person中正确执行此操作。
  3. 您的代码必须是:

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

答案 1 :(得分:1)

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

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

应该是:

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