美文网首页
关于对象实例的原型为什么是undefined?

关于对象实例的原型为什么是undefined?

作者: MrOldK | 来源:发表于2018-12-07 16:36 被阅读9次

    这几天写Blog,加深了之前的一个点,就是对象实例的原型其实是undefined
    如下例子:

function Test(name) {
  this.name = name
}
let test1 = new Test('yourName')
Test.prototype // {constructor:function Test(){}}
Test.constructor // function Function() {}
test1.constructor // function Test() {}
test1.prototype // undefined

    众所周知,实例调用属性和方法,会沿着原型链向上查找,直到找到最顶层的对象,那最顶层的对象是啥呢?看下面的例子:

Object.prototype // Object {}
Object.prototype._proto_ // undefined 

    所以,个人理解为最顶层的对象就是undefined
    好,接下来回到最初的那个问题:对象实例的原型为什么是undefined?
    原因就在于:
1)只有函数才有prototype属性。
2)所有对象都有_proto_属性,指向原型对象。
3)所有函数的_proto_都默认指向function Function() {}prototype
      所有对象的_proto_都默认指向function Object() {}prototype

也可以这样认为,函数prototype存在的意义就是在于当通过new操作符生成实例的时候,实例能够继承函数prototype指向的原型对象。

    在创建对象的时候会自动创建一个_proto_属性,指向它构造函数的prototype,当访问这个对象的属性的时候会顺带访问_proto_中对应的属性,也就是构造函数prototype,这样实现了继承。只有创建函数的时候才会创建一个prototype属性,目的就是为了完成上面的继承方式。

    以上个人理解,如有错误欢迎指正。

相关文章

  • 关于对象实例的原型为什么是undefined?

    这几天写Blog,加深了之前的一个点,就是对象实例的原型其实是undefined。如下例子: 众所周知,实例调用属...

  • 前端面试整理,CSS,JS,HTTP,REACT等持续更新

    undefined , null null是对象原型链的终点,null == undefined undefine...

  • JS高级学习:原型链/继承

    原型链 是一种关系,实例对象和原型对象之间的关系,关系是通过原型(proto)来联系的 原型指向可以改变 实例对象...

  • 原型、原型链和原型继承

    原型链 原型链是一种关系,实例对象和原型对象之间的关系,关系是通过原型(proto)来联系的;实例对象中有prot...

  • 原型、原型链和原型继承

    原型链 原型链是一种关系,实例对象和原型对象之间的关系,关系是通过原型(proto)来联系的; 实例对象中有pro...

  • 原型指向可以改变

    构造函数中的this就是实例对象原型对象中方法中的this就是实例对象 原型指向可以改变实例对象的原型proto指...

  • JS继承体系

    一、原型与实例 原型是一个对象实例是用new来从原型对象生成的一个实例对象new命令后面跟的不是类,而是构造函数。...

  • 12.如何查找构造函数和原型的属性

    构造函数.prototype 查看构造函数的原型属性实例对象.ptoto 查看实例对象的构造函数的原型实例对象...

  • 原型继承

    一、原型判断方法*术语解释:成员=属性+方法实例成员:实例属性和实例方法原型成员:原型对象属性和原型对象方法1、原...

  • 有关js原型prototype,__proto__,constr

    总结 函数都有原型。new P() 出来的是实例,实例没有原型,是个P类型的。而所有的原型其实类型都是对象。对象其...

网友评论

      本文标题:关于对象实例的原型为什么是undefined?

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