我有两个对象,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
}