gpt4 book ai didi

JavaScript Prototype 属性未添加到其继承的对象中

转载 作者:行者123 更新时间:2023-11-29 16:30:54 25 4
gpt4 key购买 nike

我正在关注 MDN关于添加属性的指南,这就是我的代码的样子

'use strict';

function Employee() {
this.name = '';
this.dept = 'general';
}
Employee.prototype.specialty = 'none';

function Manager() {
Employee.call(this);
this.reports = [];
}
Manager.prototype = Object.create(Employee.prototype);
Manager.prototype.constructor = Manager;

function WorkerBee() {
Employee.call(this);
this.projects = [];
}
WorkerBee.prototype = Object.create(Employee.prototype);
WorkerBee.prototype.constructor = WorkerBee;

function SalesPerson() {
WorkerBee.call(this);
this.dept = 'sales';
this.quota = 10;
}
SalesPerson.prototype = Object.create(WorkerBee.prototype);
SalesPerson.prototype.constructor = SalesPerson;

function Engineer() {
WorkerBee.call(this);
this.dept = 'engineering';
this.machine = '';
}
Engineer.prototype = Object.create(WorkerBee.prototype);
Engineer.prototype.constructor = Engineer;

let mark = new WorkerBee;
console.log(mark);

mark.name = 'Doe, Mark';
mark.dept = 'admin';
mark.projects = ['navigator'];
console.log(mark);

mark.bonus = 3000;
console.log(mark);

当我运行它时,我没有看到 mark 对象的 specialty 属性。

WorkerBee { name: '', dept: 'general', projects: [] }
WorkerBee { name: 'Doe, Mark', dept: 'admin', projects: [ 'navigator' ] }
WorkerBee {
name: 'Doe, Mark',
dept: 'admin',
projects: [ 'navigator' ],
bonus: 3000 }

我错过了什么?

谢谢


更新

根据@adiga 的回答,我能够在原型(prototype)链中找到 specialty 属性。

enter image description here

最佳答案

这是因为它不是实例属性,而是继承属性。它实际上在那里,只需检查它 console.log(mark.specialty)。

编辑以扩展答案

继承的属性意味着该属性存在于原型(prototype)链中,而不是它自身的实例:当您将某些东西分配给它时,例如this.age = 13; 您正在设置一个实例属性,当您将某些东西分配给用于创建实例的原型(prototype)时,您正在设置一个继承属性,在其他语言中称为静态属性(在 ES6 中称为静态属性)。

当你尝试读取像 object.someProperty 这样的属性时,JS 引擎首先查看实例属性,如果它存在,它返回它,否则它查看原型(prototype)链(从一个原型(prototype)到它的父原型(prototype))直到它找到该属性或到达最终安装的原型(prototype),该原型(prototype)为 null 并在这种情况下返回未定义)

关于JavaScript Prototype 属性未添加到其继承的对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57824585/

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