JS对象原型(继承)及原型链浅结

对于原型(继承)和原型链,我们首先得知道他两定义

原型:函数创建时(通过new创建)会有一些属性,比如prototype:返回对象原型的引用,定义储存子类继承的属性和方法,这个(prototype)就是原型,其中fn.prototype则就是原型对象。

原型链:首先对象均有proto这个属性,那么该对象通过proto可以访问到其构造函数为该对象提供的属性和值,即fn.prototype。而fn.prototype中又有proto这个属性,同理实例对象就可以通过proto访问到上层函数对象的属性和值,即形成原型链

那么原型在哪些地方要用呢?继承的时候

  • Js中只有对象有继承。继承的属性和方法都是定义在prototype从而形成一条原型链,该链最终指向null。
  • 获取原型的话建议用:Object.getPrototypeOf(person1) ;

那么原型链在哪些地方要用呢?访问对象属性的时候

  • 当试图访问对象一个属性,它不仅仅在该对象上的prototype搜寻,如果该对象没有这个属性的话,那它就会顺着这个prototype原型链往上找(只能是在prototype上定义的属性) 举个栗子:
    function Animal(){
    this.type = “Animal”;
    }
    Animal.prototype.type = ‘Animal’;
    function Dog(){ }
    Dog.prototype = new Animal();
    var small = new Dog();
    // 原型链:
    console.log(small.proto === Dog.prototype); // true
    console.log(Dog.prototype.proto === Animal.prototype); // true
    console.log(Animal.prototype.proto === Object.prototype); // true

    来张图来表明一下:

继续更新……