JavaScript 继承属性默认值

标签 javascript

考虑使用以下代码

function Employee() {
    this.id = "";
    this.name = "";
    this.gender = "";
}

function Programmer() {
    this.expertise = "";
}

Programmer.prototype = new Employee();

然后我想将 Programmer 进一步继承到 JScriptProgrammer,并将“expertise”的默认值设置为“JavaScript”。

问题: 和有什么区别

function JScriptProgrammer() {
    this.expertise = "JavaScript";
}

JScriptProgrammer.prototype = new Programmer();

function JScriptProgrammer() {
}

JScriptProgrammer.prototype = new Programmer();
JScriptProgrammer.prototype.expertise = "JavaScript";

最佳答案

您可以为对象的默认值使用原型(prototype),它确实可以节省内存。如果您以后确定不隐藏该属性(在实例上为其分配一个新值),则所有实例共享指向该值的相同指针。

但是,如果您确定要为其分配一个值,那么最好在构造函数主体中将其定义为 this.myval

这是为原型(prototype)分配默认值的棘手部分;您必须为其重新分配一个新值才能进行特定于实例的更改。可以通过对它们调用函数或重新分配属性来操纵对象值。当您这样做时,所有实例的默认值都会更改:

var Person=function(){};
Person.prototype.teeth=[0,1,2,3];
Person.prototype.legs={left:1,right:1};

var ben=new Person();
var betty=new Person();
ben.teeth.splice(2,1);//ben looses a tooth
//when ben looses a tooth like that betty looses it too
console.log(betty.teeth);//[1,2,3] poor betty
//now poor betty has an accident
betty.legs.right=0;
//looks like ben looses it too
console.log(ben.legs);//{left:1,right:0}
//I don't feel sorry for ben though because
//he knocked out betty's tooth

最好不要为继承发起一个新的实例,你可以使用Object.create或辅助函数来设置继承而不创建实例。关于继承、原型(prototype)、重写和调用 super 的所有信息:https://stackoverflow.com/a/16063711/1641941

关于JavaScript 继承属性默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19173439/

相关文章:

javascript - 将 .exr 高度图解析到 mongoDB 数据库中

javascript - 在 CoffeeScript 中声明 Backbone 集合

javascript - 单击此处的每个按钮时计数究竟是如何增加的?

javascript - 从给定的日期字符串中获取年份

javascript - 在 React 中选择项目关闭下拉菜单?

javascript - 如何借助数据库值在 openstreetmap 上添加标记

javascript - SO 如何用动画回答 div

javascript - React-router:传递多个组件会导致不变违规错误

javascript - 从具有相同类名的不同输入字段获取值

javascript - 如何在 RadioButton-Selection 上调用 Javascript 函数?