• js中的原型链


    prototype

    每一个函数对象,都有一个prototype属性,这个属性指向函数对象的原型

    funtion Person(name){
      this.name = name  
    }
    Person.prototype.age = 20;
    var per1 = new Person('ashen');
    var per2 = new Person('xing');
    per1.age //20
    per2.age //20

    在以上代码中,函数的prototype指向了一个对象,而这个对象就是调用构造函数创建的实例的原型。每一个实例对象创建的同时,就会与之关联另一个对象,这个对象就是原型,每个实例对象都会从原型中继承属性。

    __proto__

    每一个对象(除了null)都有一个__proto__属性,这个属性就指向该对象的原型。

    per1.__proto__ === Person.prototype //true

    constructor

    每个原型对象都有一个constructor属性,指向其构造函数

    Person.prototype.constructor === Person //true

    而实例对象内部没有constructor属性,但是它继承了原型对象中的constructor,所以

    per1.constructor === Person.prototype.constructor //true

    Object.getPropertyOf()

    获得对象原型的方法

    Object.getPropertyOf(per1) === Person.prototype

    原型的原型

    原型实际上也是一个对象,也可以通过它的构造函数创建,也是该构造函数的实例。原型就也有原型属性。实例的__proto__指向原型的prototype,而原型对象其实就是通过Object构造函数创建的,所以

    Person.prototype.__proto__ === Object.prototype // true

    原型链

    实例对象的__proto__属性指向该原型对象的prototype,而如果该原型对象也有自己的原型,那么该原型对象的__proto__指向自己的原型。因此,一层层嵌套,就形成了原型链

    需要注意的是,Object.prototype没有原型

    Object.prototype.__proto__ === null //true

    以上图中的,person.__proto__ -> Person.prototype   Person.prototype.__proto__ -> Object.prototype就是一条原型链

  • 相关阅读:
    java 二分查找计算时间复杂度
    idea导出javadoc文档
    ext常用属性
    hibernate执行过程
    分布式架构初探
    web中几个context上下文的理解
    网上书城项目总结(servlet_jsp+javaBean)
    javaweb面试题01
    数据源和数据库连接池
    数据结构之必需知
  • 原文地址:https://www.cnblogs.com/ashen1999/p/12731611.html
Copyright © 2020-2023  润新知