原型

作者: RQrry | 来源:发表于2019-09-24 23:19 被阅读0次

    每个函数都有一个 prototype 属性,这个属性是一个指针,指向一个函数的原型对象,这个对象包含由特定类型的所有实例共享的属性和方法。
    原型对象有一个属性 constructor,它指向函数对象。
    prototype 就是通过调用构造函数而创建的那个对象实例的原型对象。

    function Person (name) {
      this.name = name;
    }
    let person = new Person('p1');
    
    person.constructor === Person
    person.__proto__ === Person.prototype
    
    Person.__proto__ === Function.prototype
    Person.protytype.__proto__ === Object.prototype
    
    Number.prototype.constructor === Number
    Function.prototype.constructor === Function
    Object.prototype.constructor === Object
    

    当调用构造函数创建一个新实例后(对象),该实例的内部将包含一个指针(内部属性),指向构造函数的原型对象,浏览器可以通过 __proto__ 访问

    Number.__proto__ === Function.prototype
    Number.prototype.__proto__ === Object.prototype
    
    Function.__proto__  === Function.prototype
    Function.prototype.__proto__ === Object.ptototype
    
    Object.__proto__  === Function.prototype
    Object.prototype.__proto__ === null
    
    Object instanceof Object // true
    Object instanceof Function // true
    Function instanceof Function // true
    Function instanceof Object // true
    
    原型链

    例题

    function Fun () {}
    Fun.prototype.n = 1;
    let f1 = new Fun();
    Fun.prototype = {
      n: 2,
      m: 3
    };
    let f2 = new Fun();
    console.log(f1.n, f1.m, f2.n, f2.m);
    // 1 undefined 2 3
    
    let Fun = function () {}
    Object.prototype.a = function () {
      console.log('a()');
    }
    Function.prototype.b = function () {
      console.log('b()');
    }
    let f = new Fun();
    f.a(); // a()
    f.b(); // not a function
    Fun.a(); // a()
    Fun.b(); // b()
    // f.__proto__ === Fun.prototype
    // Fun.prototype.__proto__ === Object.prototype
    // Fun.__proto__ === Function.prototype
    

    相关文章

      网友评论

          本文标题:原型

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