<body> <!-- 重点:让新实例的原型等于父类的实例。 特点:1、实例可继承的属性有:实例的构造函数的属性,父类构造函数属性,父类原型的属性。(新实例不会继承父类实例的属性!) 缺点:1、新实例无法向父类构造函数传参。 2、继承单一。 3、所有新实例都会共享父类实例的属性。(原型上的属性是共享的,一个实例修改了原型属性,另一个实例的原型属性也会被修改!) --> <script> //父类型 function Supper(P){ this.subProp = P } Supper.prototype.showSupperProp = function(){ console.log(this.subProp) } //子类型 function Sub(){ this.subP = ‘Sub property‘ } //重点!!!下面这句 Sub.prototype = new Supper(‘hhh‘) //重点!! Sub.prototype.constructor = Sub console.log(Sub.prototype) Sub.prototype.showSubProp = function(){ console.log(this.subProp) } var sub = new Sub() // 新实例无法向父类构造函数传参。 sub.showSupperProp()//sub是找作用域链, .showSupperProp找的是原型链 sub.toString()//能找到,能的原因是内部有条,Object.prototype有toString // showSupeerProp在Supper的prototype上 // Sub.prototype={} // ***Supper上的实例能看到Supper.prototype // Sub.prototype=new Supper() sub.showSubProp() /*问题*/ console.log(sub.constructor) //指向Super 因为Sub.prototype=new Super() //所以需要加上Sub.prototype.constructor = Sub </script> </body>
Sub.prototype = new Supper(‘hhh‘) //这句是为了让Sub得到Supper原型上的方法,而不是得到Supper实例上的属性,因为后面new出来的sub并不能改变这些属性
var sub = new Sub() // 新实例无法向父类构造函数传参。
原文:https://www.cnblogs.com/lucy-xyy/p/11720491.html