gpt4 book ai didi

javascript - 为什么 'this' 始终是 Javascript 类原型(prototype)中的窗口

转载 作者:行者123 更新时间:2023-11-28 13:59:44 25 4
gpt4 key购买 nike

这是代码

function Person(name, age, weight) {
this._name = name;
this._weight = weight;
this._age = age;
}

Person.prototype = {
Anatomy: {
Weight: this._weight,
Height: (function () {
//calculate height from age and weight
})
}
}

当我运行此代码时,我预计 Anatomy.weight 为 60:

var x = new Person('jack',24,60);
console.dir(x.Anatomy);

令我惊讶的是它是未定义的。经检查,this 似乎指的是全局对象窗口。现在这里发生了什么:(我希望 this._weight 指的是 Person 对象的重量,否则从粗略计算来看,这至少应该指的是 Anatomy,因为它是一个对象。有人可以澄清一下这个疑问

最佳答案

你不能那样做。 this 仅在函数中可用。在您使用它的地方,它指的是全局对象。一个可能的解决方案是这样的:

function Anatomy(weight) {
this.Weight = weight;
this.Height = [...];
}

function Person(name, age, weight) {
this._name = name;
this._weight = weight;
this._age = age;
this.Anatomy = new Anatomy(this._weight);
}

我不知道这是否是最好的解决方案,但这是我现在能想到的最好的解决方案。

关于javascript - 为什么 'this' 始终是 Javascript 类原型(prototype)中的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6148472/

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