javascript继承

javascript的继承机制算是JS的一个难点了,之前很长一段时间对这一块的理解一直处于模糊状态,前端时间突然看到很久之前记录的笔记,突然茅塞顿开,特此记录一下,希望对广大网友能有所帮助。
首先想彻底搞懂javascript继承机制,我们需要先搞懂几个概念:

1、什么是javascript的原型

(1) prototype本质上只是一个JavaScript对象;
(2) 每个函数都有一个默认的prototype属性;
(3) 通过prototype我们可以扩展Javascript的原型对象;
(4) 原型对象中的所有属性,子对象可直接使用,不用重复创建;

var park = function(name){
	this.name = name;
}
park.prototype.getParkName = function(){
	console.log(this.name);
}

getParkName方法被添加到了park函数的prototype属性上了。

javascript继承

2、原型链又是什么?

由各级对象的_ proto _属性连续继承实现的链式结构。

注意:__proto__就是指向原型上的prototype

原型链有几个特点:
1、保存了对象的共有属性和方法。
2、控制着对象属性的使用顺序: 先用自有的,自己没有,再延原型链向父对象查找,只要找到就能用。
(此处不完全懂没关系,后面会详细讲解)
javascript继承

3、constructor 到底指的是什么?

1、constructor就是对象原型的一个属性;
2、constructor 默认指向创建当前对象的构造器函数;

javascript继承

4、New 调用构造函数的时候到底发生了什么?

1、创建一个空对象;
2、让新对象继承构造函数的原型对象, 即设置新对象的_ _ proto _ _ 属性指向构造函数的原型对象;
3、用空对象调用构造函数(将构造函数中的this自动指向空对象);
4、 返回新对象地址

5、原型链间的构造函数继承

javascript继承

6、非构造函数间继承

javascript继承