谈到原型和原型链,相信很多人都会想到js类与继承,但由于js是基于对象的语言,并不是面向对象的,所以它本身并没有类的概念,当然,也没有继承的概念,但是我们通常通过对象和原型的方式来实现类似类继承机制
- 首先我们来说一下类,js 中通常利用函数名首字母大写的函数来表示类
如:
function Parent(){}
parent可表示一个类,想要实例化它,直接
var p1=new Parent();
就可以
- 原型:在js中,每定义一个对象(函数)的时候,对象中都会包含一些预定义的属性,其中函数对象的一个属性就是原型对象prototype,它通常是用来继承的
- 原型链:类继承时顺着它向上找,比如说:先找自己构造函数中的,如果没有,找它的原型中的,然后是它父类的构造函数中的,它父类的原型中的,一直向上找,出口为object.prototype.proto=null;
- js中主要通过三个语句来实现继承,分别如下,例如child 想继承parent:
class Parent(name){
this.name=name;
ths.hobby=['sing','dance','shopping'];
}
Parent.prototype.sayHello=function(){
console.log('hello');
}//属性写在构造函数中,方法写在prototype下
class Child(){
Parent.call(this);//用于继承属性,解决属性为引用类型时一个改变全改变问题
}
Child.prototype= new Parent();//用于继承,继承其所有
Child.prototype.constructor = Child;**//将因为上一步将.costructor修改的属性改为正确值