继承对象的属性访问和赋值是有差别的

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;
因为当扩展子类行为的时候后者会影响到父类原型, 这样就打破了继承自上而下共享的体系

原文地址:https://www.cnblogs.com/mushishi/p/5812088.html