gpt4 book ai didi

javascript - 为什么要在函数及其原型(prototype)上设置属性?

转载 作者:行者123 更新时间:2023-11-28 04:30:53 25 4
gpt4 key购买 nike

我试图理解 JavaScript 的 OOP 模型,所以我读了这篇文章: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript

下面的代码很有趣:

function Person(gender) {
this.gender = gender;
alert('Person instantiated');
}

Person.prototype.gender = '';
var person1 = new Person('Male');
var person2 = new Person('Female');
//display the person1 gender
alert('person1 is a ' + person1.gender); // person1 is a Male

对我来说有趣但不清楚的是这一行:

Person.prototype.gender = '';

我不明白,所以我测试了使用该行和不使用该行的代码。

代码在这两种情况下都运行良好。

所以我的问题是:

作者为什么要添加这一行?

最佳答案

您不应在原型(prototype)上设置数据。很多时候,从经典语言转向 JavaScript 的人尝试用它来模拟经典继承,但原型(prototype)链的不对称性质(设置总是本地,但获取向上爬链)意味着它不切实际。有关原型(prototype)继承的更多信息,click here .

原型(prototype)用于跨实例共享功能。而是将函数放在那里。如需共享数据,see this answer .

那篇将性别放在原型(prototype)上的文章是错误的。这就是为什么在 ES6 中,最大最小类在原型(prototype)上设置函数,而不是数据成员。请参阅this article为什么要避免原型(prototype)上的数据。

我已经修复了 MDN 文章,不错。

关于javascript - 为什么要在函数及其原型(prototype)上设置属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44621334/

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