最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 前端深度思考(一)——原型和原型链

    正文概述 掘金(掉了眼的猫)   2021-03-09   483

    prototype

    每一个js对象(null除外)在创建的时候就会与之关联另一个对象【Prototype】,这个对象就是我们所说的原型。每个对象都会从原型“继承”属性。

    举个例子

    var obj = {
        name: "zhangsan"
    }
    
    var newObj = Object.create(obj)
    
    newObj.name // zhangsan
    

    上述例子中,newObj对象的【Prototype】属性引用了obj对象,也就是说newObj对象的【Prototype】指向了obj对象,并继承了obj的属性。

    几乎所有的对象在创建时【Prototype】属性都会被赋予非空的值,由【Prototype】串联起来的对象的关系链条我们就称为【Prototype】链也就是原型链,一般情况下【Prototype】链的最顶层是Object.prototype

    每个函数都有一个 prototype 属性。

    function Person(){}
    
    Person.prototype.name = "zhangsan"
    
    var person = new Person()
    
    person.name // zhangsan
    

    前端深度思考(一)——原型和原型链

    proto

    每一个js对象(除null)都具有一个属性叫proto,这个属性会指向改对象的原型。

    对象可以通过__proto__访问内部的【Prototype】属性,即我们可以通过__proto__访问对象的原型。

    ps: __proto__是一种非标准的方法,实际开发中我们应该使用Object.getPrototypeOf()来获取对象的原型

    function Person(){}
    
    var person = new Person();
    
    person.__proto__ === Person.prototype // true
    

    前端深度思考(一)——原型和原型链

    constructor

    每个原型都有一个constructor属性指向关联的构造函数,实例原型指向构造函数

    function Person(){}
    person.__proto__ == Person.prototype // true
    Person === Person.prototype.constructor // true
    
    Object.getPrototypeOf(person) === Person.prototype // true
    

    补充说明:

    function Person() {
    
    }
    var person = new Person();
    person.constructor === Person// true
    

    当获取 person.constructor 时,其实 person 中并没有 constructor 属性,当不能读取到constructor 属性时,会从 person 的原型也就是 Person.prototype 中读取,正好原型中有该属性,所以:

    person.constructor === Person.prototype.constructor
    

    前端深度思考(一)——原型和原型链

    实例与原型

     当读取实例的属性时,如果找不到,就会查找与对象关联的原型中的属性,如果还查不到,就去找原型的原型,一直找到最顶层为止。

    前端深度思考(一)——原型和原型链

    原型链

    简单的回顾一下构造函数、原型和实例的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。那么假如我们让原型对象等于另一个类型的实例,结果会怎样?显然,此时的原型对象将包含一个指向另一个原型的指针,相应地,另一个原型中也包含着一个指向另一个构造函数的指针。假如另一个原型又是另一个类型的实例,那么上述关系依然成立。如此层层递进,就构成了实例与原型的链条。这就是所谓的原型链的基本概念。

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

    前端深度思考(一)——原型和原型链


    起源地下载网 » 前端深度思考(一)——原型和原型链

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元