继承对象的属性访问和赋值是有差别的
Javascript对象具有“自有属性”(可以通过hasOwnProperty方法判断,就是直接定义在自身的属性,而不是继承而来), 也有一些属性是从原型对象继承而来的。
不过js的继承体系和C#的继承是有些区别的:
- C#的继承则是直接拥有父类的公开成员(public/protected),查询和修改操作都是针对同一个成员
- js的成员访问是通过原型链访问到父类的成员(属性和函数),但是赋值的时候只能直接赋给自有属性 ,不会去修改原型链
例子:
var base=function(){
this.name="father";
}
var child=function(){}
child.prototype=new base();
var instance=new child();
console.log(instance.name); // father
instance.name='child'; // instance: {"name":"child"}
console.log(instance); // 继承的name不变 还是father
ps: 为什么继承 child.prototype=new base(); 而不是直接用父类的原型 child.prototype=base.prototype;
因为当扩展子类行为的时候后者会影响到父类原型, 这样就打破了继承自上而下共享的体系
本文来自博客园,作者:mushishi,转载请注明原文链接:https://www.cnblogs.com/mushishi/p/5812088.html