【发布时间】:2020-08-16 15:16:05
【问题描述】:
在阅读https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Inheritance 时,我看到我们应该用一个新的原型替换Teacher 的原型,它的原型设置为Person:
Teacher.prototype = Object.create(Person.prototype);
Object.defineProperty(Teacher.prototype, 'constructor', {
value: Teacher,
enumerable: false, // so that it does not appear in 'for in' loop
writable: true });
我宁愿这样做,这对我来说似乎更合乎逻辑:
Teacher.prototype.__proto__ = Person.prototype
据我了解,它最终得到相同的结果并且构造函数保持正确,我不必替换它。
MDN的做法和我的有什么不同吗?
//编辑
正如@Asutosh 指出的那样,MDN 不鼓励使用__proto__ (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto)。但是,MDN 也说要改用Object.setPrototypeOf。那么,我可以这样做吗:
Object.setPrototypeOf(Teacher, Person.prototype)
而不是原来的
Teacher.prototype = Object.create(Person.prototype);
Object.defineProperty(Teacher.prototype, 'constructor', {
value: Teacher,
enumerable: false, // so that it does not appear in 'for in' loop
writable: true });
【问题讨论】:
-
proto 的使用在某种程度上已被弃用。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
-
@Asutosh 这很有趣,谢谢。那么,这个呢,而不是:
Object.setPrototypeOf(Teacher, Person.prototype) -
这也是不鼓励的。
-
啊,再次 :) 好的,我明白了。但是,我仍然很好奇,我提出的设置原型的方法会破坏某些东西吗(让我们完全忘记 MDN 不鼓励这样做)。我正在尝试了解 JS 是如何工作的。
-
不,它不会破坏任何东西。
标签: javascript oop