美文网首页
JS构造函数原型与实例的思考

JS构造函数原型与实例的思考

作者: 秘果_li | 来源:发表于2020-05-28 17:19 被阅读0次
        Function.prototype.a=()=>{
          console.log('aaaaa')
        }
        Object.prototype.b=()=>{
          console.log('bbb')
        }
        function A(){
          this.name = 'user'
        }
        A.prototype.c=()=>{
          console.log('ccc')
        }
        const a=new A()
        
        a.a(); // "error" "TypeError: a.a is not a function"
        a.b(); // "bbb"
        a.c(); // "ccc"
        A.a(); // "aaaaa"
        A.b(); // "bbb"
        A.c(); // "error" "TypeError: A.c is not a function"
    

    在JS中,所有对象都是 Object 的实例,Object是原型链的源头

    console.log(Object.prototype.__proto__); // null
    

    a是A的实例,可以访问A原型上的方法 c()b() 在Object原型上,任何对象都可以访问到 b() 函数

        Object.prototype.b=()=>{
          console.log('bbb')
        }
        const obj={};
        obj.b(); // "bbb"
    

    方法 a() 在 Function 原型上,A 是 Function 的实例,因此 A 可以访问到 a() ,原型链是通过 __ proto __ 指向查找的

    实例中的指针只指向原型,而不是构造函数

    因此实例 a 并不能访问到 a()

    关于原型与构造函数的关系:
    每个函数都有一个 prototype 属性指向该函数的原型对象,而所有的原型对象都会获得一个 constructor 这个属性包含了一个指向 prototype 属性所在函数的指针

    相关文章

      网友评论

          本文标题:JS构造函数原型与实例的思考

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