美文网首页
JScript语言——原型与原型链

JScript语言——原型与原型链

作者: 张先觉 | 来源:发表于2020-06-20 10:15 被阅读0次

    # 原型:prototype属性__proto__constructor属性

    • prototype,只是函数的一个属性(function.prototype),也是我们所说的原型对象。那什么是原型呢?你可以这样理解:每一个JavaScript对象(null除外)在创建的时候,就会关联到另一个对象(prototype),这个对象就是我们所说的原型,每一个对象都会从原型"继承"属性。
    • 每一个JavaScript对象(除了 null )都具有的一个属性,叫__proto__,这个属性会指向该对象的原型。
    • constructor,每个原型都有一个 constructor 属性指向关联的构造函数。


      1.png

    推理原型链

    function Person(){
    
    }
    let person1 = new Person();
    let person2 = new Person();
    
    // 第一阶段:从构造函数开始推理,清晰prototype属性、constructor属性、__proto__属性
    console.log(`构造函数就是一个Function:${Person}`);
    console.log(`prototype就是构造函数的属性,指向原型对象:${Person.prototype}`);
    console.log(`constructor原型的属性,指向构造函数:${Person.prototype.constructor}`);
    console.log(`对象person1、person2共享原型吗?${person1.__proto__ === person2.__proto__}`);
    
    // 第二阶段:提问:是谁实例出的构造函数对象呢?又是谁实例化出构造对象的原型呢?
    console.log(`Function.prototype实例化了Person构造函数:${Person.__proto__}`);
    console.log(`Object.prototype实例化了Person构造函数的原型对象${Person.prototype.__proto__}`);
    
    // 第三阶段:理清Function()、Function.prototype、Object()、Object.prototype、null
    console.log(`Function的__proto__指向Function.prototype:${Person.__proto__.constructor.__proto__ === Person.__proto__}`);
    console.log(`Object的__proto__指向Function.prototype:${Person.prototype.__proto__.constructor.__proto__ === Person.__proto__}`);
    console.log(`Function.prototype的__proto__指向Object.prototype:${Person.__proto__.__proto__ === Person.prototype.__proto__}`);
    console.log(`Object.prototype的__proto__指向null:${Person.prototype.__proto__.__proto__ === null}`);
    
    prototype.png

    相关文章

      网友评论

          本文标题:JScript语言——原型与原型链

          本文链接:https://www.haomeiwen.com/subject/hfjwxktx.html