<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() // 新实例无法向父类构造函数传参。