Skip to content

JavaScript 中 `prototype` 和 `__proto__` 的区别

Posted on:2024年6月21日 at 07:46

在 JavaScript 的世界中,prototype__proto__ 是两个关键概念,特别是当你在理解原型链和继承时。本文将通过不同的视角来解释它们的区别和关系。

一、背景介绍

JavaScript 中的引用类型包括 ObjectFunctionArrayDate 等。其中,ObjectFunction 是 JavaScript 语言中的基础。尽管 JavaScript 没有类的概念,但函数被用来模拟类的行为。因此,理解 prototype__proto__ 对于掌握 JavaScript 的面向对象编程至关重要。

二、prototype[[Prototype]]

prototype 是用来区分函数与普通对象的一个重要属性:

三、prototype__proto__ 的关系

例如:

function Person(name) {
  this.name = name;
}

var john = new Person('John');

console.log(john.__proto__ === Person.prototype); // true
console.log(Person.prototype.constructor === Person); // true

在这个例子中,当我们使用 new 操作符创建 john 对象时,Personprototype 属性就成为 john 对象的 __proto__

四、标准与非标准属性

五、总结

  1. prototype 是构造函数的属性,用于定义实例对象的共享属性和方法。
  2. __proto__ 是实例对象的属性,用于指向其构造函数的 prototype,从而形成原型链。
  3. 现代 JavaScript 推荐使用 Object.getPrototypeOfObject.setPrototypeOf 代替 __proto__ 进行原型操作,以确保代码的兼容性和规范性。