我有两个对象,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();
答案 0 :(得分:1)
Person1.getName : Person.getFullName.bind(Person1)
不是在对象文字中声明方法的正确语法。您正在var Person
中正确执行此操作。 您的代码必须是:
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
}