构造函数、原型对象
1.构造函数
function A(name) {
this.name = name;
this.arr = [1];
this.say = function(){
console.log('hi')
}
}
注意:
- 数组和方法都属于”实例引用属性“,但是数组强调私有、不共享的。方法需要复用、共享;
- 在构造函数中,一般很少有数组形式的引用属性,大部分情况都是:基本属性+方法。
2.原型链
每个实例对象(Object)都有一个私有属性(称之为__proto__)指向它的构造函数的原型对象(prototype)。该原型对象也有一个自己的原型对象(proto,层层向上知道一个对象的原型对象为null。根据定义,null没有原型,并作为这个原型链中的最后一个环节。
继承分类
继承方法 | 继承核心代码 | 优点 | 缺点 |
---|---|---|---|
原型链继承 | child.prototype = new parent() | 父类方法可以复用 | 不可以传参, 实例的引用类型会被共享 |
构造函数继承 | 在子类child里执行parent.call(this} | 实例的引用类型不共享 ,可以传参 | 父类的方法不能复用,子类实例的方法每次都是被单独创建的 |
组合式继承 | child.prototype = new parent(); parent.call(this) | 父类的方法可以被复用;父类的引用属性不会被共享; 子类构建实例时可以向父类传递参数 | 调用两次父类的构造函数,第一次给子类的原型添加了父类的name, arr属性;第二次又给子类的构造函数添加了父类的name, arr属性,从而覆盖了子类原型中的同名参数 |
原型式继承 |