gpt4 book ai didi

javascript - 为什么在调用对对象方法的引用时方法的 `this` 会发生变化?

转载 作者:数据小太阳 更新时间:2023-10-29 04:24:30 62 4
gpt4 key购买 nike

function Person(gender) {
this.gender = gender;
}

Person.prototype.sayGender = function()
{
alert(this.gender);
};

var person1 = new Person('Male');
var genderTeller = person1.sayGender;

person1.sayGender(); // alerts 'Male'
genderTeller(); // alerts undefined

为什么 genderTeller();警报未定义我不清楚。如果我看到它,我相信它和上面的线一样。能否请一些人解释一下细节

最佳答案

当你像这样分配一个变量时......

var genderTeller = person1.sayGender;

...您丢失了 person1 对象的 context,函数的 this 指向全局对象 (window 在浏览器中),而不是实例化的 person1 对象。

您得到 undefined 因为 gender 属性在 window 上不存在,并且在对象上引用 undefined 属性返回 undefined 在 JavaScript 中。

您可以在现代浏览器中使用 bind() 修复该问题...

var genderTeller = person1.sayGender.bind(person1);

...或者 jQuery 有一个方法也叫做 proxy() .

var genderTeller = $.proxy(person1.sayGender, person1);

关于javascript - 为什么在调用对对象方法的引用时方法的 `this` 会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7657633/

62 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com