最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 原型、原型链知识回顾

    正文概述 掘金(FujiHai)   2020-11-23   585

    前言

    原型和原型链是 JavaScript 中非常重要的一个知识点。

    前置知识

    构造函数

    构造函数在面向对象的语言中,通常是用来创建实例对象。在 ES6 版本前,JavaScript 中使用 function 来模拟类。

    function Person (name, age) {
        this.name = name;
        this.age = age;
    }
    

    实例

    借助构造函数,使用 new 的方式来创建一个实例。

    var p = new Person('James', 24);
    

    原型、原型链

    原型是构造函数上的一个属性,称为 prototype,属性值是一个对象。

    Person.prototype
    

    原型、原型链知识回顾

    构造函数、原型和实例之间的关系

    接下来,结合例子来理解上面的这段话:

    function SuperType () {
        this.property = true;
    }
    
    SuperType.prototype.getSuperValue = function () {
        return this.property;
    };
    
    function SubType () {
        this.subproperty = false;
    }
    
    // 继承 SuperType
    SubType.prototype = new SuperType();
    
    SubType.prototype.getSubValue = function () {
        return this.subproperty;
    }
    
    let instance = new SubType();
    console.log(instance.getSuperValue())
    
    SuperType.prototype
    SubType.prototype
    

    原型、原型链知识回顾

    SuperType.prototype.constructor
    SubType.prototype.constructor
    

    原型、原型链知识回顾

    这里留个疑问。为什么 SubType 原型上的 constructor 属性是指向 SuperType 呢?这里就涉及到原型链的概念。

    instance.__proto__ === SubType.prototype
    instance.__proto__ === SuperType.prototype
    

    原型、原型链知识回顾

    // SubType 的原型是 SuperType 的实例
    SubType.prototype = new SuperType();
    SubType.prototype.__proto__ === SuperType.prototype
    

    原型、原型链知识回顾

    原型、原型链知识回顾

    回到步骤 3 的疑问,为什么 SubType.prototype.constructor 是指向 SuperType 呢?

    1. constructor 是原型上的属性

    2. 未修改 SubType.prototype 原型前,SubType.prototype 上是 constructor 是指向本身的构造函数的

    原型、原型链知识回顾

    1. SubType.prototype = new SuperType() 执行后。原型对象变成了 SuperType 的实例。实例的 constructor 属性是指向构造函数的。当我们使用 SubTyper.prototype.constructor 访问构造函数时,实际上便是在原型链上进行了查找。整个查找过程如下:首先查找 Subtype.prototype 有没有 constructor 属性。由于它已经是 SuperType 的实例了。实例上没有找到 constructor 属性,就会去原型上找,最后在 SuperType 上面找到了。所以,SubType.prototype.constructor 指向的是 SuperType.

    总结

    • 构造函数都有一个原型对象 prototype,构造函数也属于对象。
    • 对象都有一个 __proto__ 属性,指向它的原型。
    • Object 原型是原型链的终点,因为 Object.__proto__ === null
    • 原型对象上有一个 constructor 属性,指向原型对应的构造函数。

    起源地下载网 » 原型、原型链知识回顾

    常见问题FAQ

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

    发表评论

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

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

    联系作者

    请选择支付方式

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