【发布时间】:2021-01-29 20:37:22
【问题描述】:
不确定是否有人可以帮助我解决这个问题,但我知道可以使用 bind、apply 和 call 方法使函数中的 this 关键字引用您选择的特定对象。但是,我仍然有点困惑,因为在某些情况下,当我期望一个特定的结果时,我得到了另一个。这是我拥有的对象的示例:
var obj = {
fullName: "John Doe",
person: {
sayHi: function() {
console.log("This person's name is " + this.fullName)
}
}
}
我知道调用 obj.person.sayHi() 方法会导致人名未定义,因为隐式对象是人。
我也知道您可以通过使用 bind 调用方法来引用正确的对象,或者像这样调用:
obj.person.sayHi.call(obj) 或 obj.person.sayHi.bind(obj)()
为了显示此人的姓名。但是,我也希望可以将绑定直接附加到对象内部的函数表达式,如下所示:
var obj = {
fullName: "John Doe",
person: {
sayHi: function() {
console.log("This person's name is " + this.fullName)
}.bind(obj)
}
}
然后像这样调用函数:obj.person.sayHi(),你会得到相同的结果,但是在这种情况下,this 关键字指的是全局对象。但是,如果我执行以下操作:
let sayHi = function() {
console.log("This person's name is " + this.fullName)
}
sayHi.bind(obj)();
然后我得到了想要的结果。谁能解释为什么第二种方法不是有效的?提前致谢。
【问题讨论】:
标签: javascript object binding this