JavaScript 继承的属性默认值
JavaScript Inherited Properties Default Value
考虑使用以下代码
function Employee() {
this.id = "";
this.name = "";
this.gender = "";
}
function Programmer() {
this.expertise = "";
}
Programmer.prototype = new Employee();
然后我想将程序员进一步继承到 JScriptProgrammer,默认值"专业知识"设置为"JavaScript"。
问题:两者之间的区别是什么
function JScriptProgrammer() {
this.expertise = "JavaScript";
}
JScriptProgrammer.prototype = new Programmer();
和
function JScriptProgrammer() {
}
JScriptProgrammer.prototype = new Programmer();
JScriptProgrammer.prototype.expertise = "JavaScript";
您可以将原型用于对象的默认值,它确实可以节省内存。如果以后不确定是否隐藏属性(在实例上为其分配新值),则所有实例共享指向该值的同一指针。
但是,如果您确实要为其分配一个值,那么最好在构造函数主体中将其定义为this.myval
这是为原型分配默认值的棘手部分;您必须重新为其分配一个新值才能进行特定于实例的更改。可以通过调用对象值上的函数或重新分配属性来操作对象值。执行此操作时,所有实例的默认值都会更改:
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 或帮助程序函数来设置继承,而无需创建实例。所有关于继承,原型,覆盖和调用super:https://stackoverflow.com/a/16063711/1641941
区别
function JScriptProgrammer() {
this.expertise = "JavaScript";
}
JScriptProgrammer.prototype = new Programmer();
这意味着当你使用JScriptProgrammer()时,专业知识值已经设置为"JavaScript"
但是当你使用
function JScriptProgrammer()
{
}
JScriptProgrammer.prototype = new Programmer();
JScriptProgrammer.prototype.expertise = "JavaScript";
表示在使用 JScriptProgrammer() 后设置专业知识值
它们是相同的。第二个版本节省了内存,这意味着所有子版本都使用相同的函数/变量实例。
请参阅以下示例,其中显示了可能需要this
的原因
function JScriptProgrammer() {
var tmp = "Hello";
//accessing private variables
this.sayHello = function() {
alert(tmp + " "+ this.expertise + "er");
}
}
JScriptProgrammer.prototype = new Programmer();
JScriptProgrammer.prototype.expertise = "JavaScript";
更多阅读
- 在 JavaScript 中使用"原型"与"这个"?
- 在构造函数中声明 javascript 对象方法与在原型中声明
- 如何设置已经实例化的 JavaScript 对象的原型?
在简历中:
原型用于继承现有对象。例如。如果要向 Array 对象添加新方法,可以执行此操作
Array.prototype.MyNewMethod = function()
{
alert("im bellow to array object")
}
这意味着你可以对此
var array = [1,2,3];
array.MyNewMethod();//prints im bellow to array object
(阅读这篇文章以获取更多参考)
这意味着您的代码正在执行以下操作:
function JScriptProgrammer() {
}
function Programmer(){
this.name = "hello world";
}
JScriptProgrammer.prototype = new Programmer();// inhering from Programmers object(or lets say class)
JScriptProgrammer.prototype.expertise = "JavaScript"; // assigning a value to expertise property that belows to JScriptProgrammer class
console.log(new JScriptProgrammer())//JScriptProgrammer {name: "hello world", expertise: "JavaScript"} notice that property name that bellow to Programmer
object now is in JScriptProgrammer object as well.
这里测试 http://jsbin.com/IgOFimi/1/edit
- Html5输入属性的默认值,如最小值、最大值、大小等
- 在JavaScript中,函数的默认值是多少'的原型属性
- 在 ReactJS 中设置缺失属性的默认值
- 如果会话中的属性不为 null 或默认值,则运行/打印 JavaScript Razor ASP.NET MVC
- 接受选项对象作为参数的简洁方法,回退到省略属性的默认值
- JavaScript 继承的属性默认值
- 如果属性值为 null,则使用主干模型默认值
- 无法使用 jQuery 更改输入的默认值属性
- Javascript 更新未发布,属性在绑定时具有默认值
- 使用用户提供的对象的属性(如果存在),否则使用默认值
- 如何设置指令属性的默认值
- Jquery自定义验证,具有Html 5数据属性和默认值
- 设置对象属性的默认值
- 是否有CSS属性的默认值列表?(所以我可以在js中为他们创建一个排除数组)
- XMLHttpRequest上async属性的javascript默认值是什么?开放的方法
- 属性默认值:Attribute . defaultvalue
- Null对象中属性默认值的赋值
- 为不存在的属性设置默认值的Angular服务
- toggleProperty将组件的所有属性设置为默认值
- 将元素的属性设置为"from"中的默认值关键帧规则关键字