【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
6function 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__/