【javaScript】prototype和__proto__

prototype和__proto__

相关文章

prototype和__proto__


一、prototype属性

prototype 是每个函数 对象都有的一个内部属性,它是一个指向其prototype对象的指针。

  • 默认情况下,函数的prototype对象下只有constructor、__proto__等属性

    • 其中prototype.constructor 指向函数本身

    • 其中prototype.__proto__ 指向Function的prototype

  • 当你使用 new 操作符来创建一个实例时,该实例会继承构造函数的prototype对象上的属性和方法。

    1
    2
    3
    4
    5
    6
    function Person() {}
    Person.prototype.sayHello = function() {
    console.log('Hello');
    }
    var person1 = new Person();
    person1.sayHello(); // 输出: Hello
  • 对于其他类型的对象,如普通对象、数组等,它们的 prototype 是 undefined。

  • 对于undefined和null,当读取prototype时则会报错

二、__proto__属性

__proto__ 是每个 JavaScript 对象都有的一个内部属性,用于指向其构造函数的原型对象。

  • 对于undefined和null,当读取__proto__时则会报错

  • 对于其他类型的对象,如普通对象、数组等,它们的 proto 是 该对象对应类型的原型对象。

三、总结

  • prototype:

    • prototype 是函数对象特有的属性,每个函数对象都有一个 prototype 属性,它指向一个对象,称为该函数的原型对象。
    • prototype 用于实现继承和共享属性和方法。通过函数的 prototype 属性,可以定义该函数所创建对象的原型。
  • proto:

    • proto 是每个 JavaScript 对象(包括函数对象)都有的一个内部属性,它指向该对象的构造函数的原型对象。
    • proto 用于构成对象的原型链。当访问对象的属性或方法时,如果在对象自身上找不到,JavaScript 引擎会沿着对象的 proto 属性向上查找,直到找到为止。
  • 关系:

    • 一个函数对象的 prototype 属性指向该函数的原型对象,而该原型对象的 constructor 属性又指回该函数本身,形成了一个闭环。
    • 一个对象的 proto 属性指向该对象的构造函数的原型对象,从而形成了对象之间的原型链。

【javaScript】prototype和__proto__
https://www.cccccl.com/20210504/javascript/prototype和__proto__/
作者
Jeffrey
发布于
2021年5月4日
许可协议