function Parent(){
this.name = "人类"
this.info = {
sex:"男",
age:10
}
this.say = function(){
console.log('hello!')
}
}
Parent.prototype.height = 1.75
Parent.prototype.do = function(){
console.log('do!')
}
//构造函数
function Child(){
Parent.call(this, arguments)
}
//原型链模式
// Child.prototype = new Parent();
// Child.prototype.constructor = Child;
//组合寄生模式
function inhreitPrototype(child, parent){
let prototype = Object.create(parent.prototype)
prototype.constructor = child
child.prototype = prototype
}
inhreitPrototype(Child, Parent);
const child = new Child()
console.log(child.name,'child.name')
console.log(child.height)
child.say()
// function aaa(){}
function SuperClass() {
this.colors = ["red", "black"]
this.age = 10
}
function SubClass() {}
SubClass.prototype = new SuperClass()
var o1 = new SubClass()
var o2 = new SubClass()
o1.colors.splice(1, 1, "yellow");
o1.age = 20
console.log(o1.colors)
console.log(o2.colors)
console.log(o1.age)
console.log(o2.age)
//原型连继承的缺点: 1. 父类的属性是引用类型, 所有子类都会共享
//2. 不能在不影响其它实例的情况下向父类传递参数;
//构造函数继承:
//1. 实例的属性每个实例应该各自有各自的, 但是父类的方法每个实例应该共享, 但是上面这种写法,弗雷德方法在每个自理
//的实例都有, 对于方法来说没有必要(子类的实例不回去更改方法, 而且每个子类的实例都有这个方法会耗费内存),应该让每个子类的实例共享弗雷德方法;
//之前在父类中定义方法,这样子类的实例无法共享弗雷德方法, 现在将弗雷德方法定义在弗雷德prototype中, 然后将父类的实例对象赋给子类的原型对象,这样就可以在子类的实例
//中共享父类的方法
console