JavaScript的原型与继承

JavaScript是一门基于原型的语言,它的继承是以原型链来继承的

首先来说一说什么是原型

JavaScript中创建的每一函数都有一个prototype属性,这个属性是一个指针,指向一个对象,这个对象的作用是包含可以由特定类型实例共享的属性和方法,这个对象就是函数的原型对象。

有了原型概念之后,看一下函数创建的过程

1
function A(){}

当我们在代码里面声明这么一个空函数,JS解析可以理解为:

1.创建一个对象,有construtors属性及prototype属性

2.创建一个函数,有name、prototype属性。(函数的prototype属性指向了上面创建的对象,也就是它的原型对象,也就是引用刚才创建的对象)

3.创建了变量A,同时把函数引用赋值给变量A

接下来我们看一下Prototype的作用

1
 function A(name){

 	this.name="name"
}

 A.prototype.say=function(){
 	console.log("我的名字是"+this.name);
}

  var B = new A("xiaoming")//B.prototype=A.prototype;
  
  console.log(B.say)//我的名字是小明

了解了prototype的作用,因为每个对象都有一个Prototype属性,所以它保存的地址就构成了对象的原型链,js的继承就是以原型链来继承的。对象在查找某个属性时,首先会遍历自身的属性,如果没有会继续查找Prototype引用的对象,如果再没有则继续往上查找prototype引用对象,以此类推。

继承

1
function c(name){
 	 	this.name=name;
 	 }
 	 function b(){
 	 	this.age=15;
 	 }
    b.prototype.say=function(){
     console.log("我今年"+this.age+"岁");
    }
 	 c.prototype=new b();
 	 var v = new c("xiao");
 	 v.say(); //我今年15岁

把函数c的原型指向函数b的实例,这样函数c就继承了函数b的属性,形成了原型链