返回

JavaScript 原型链揭秘:任何对象都从 Object 继承

前端

万物皆对象,皆承 Object

在 JavaScript 中,一切皆对象,包括原始值。当我们使用 new 创建对象时,JavaScript 就会在幕后创建一个新的对象,并将该对象的原型设置为 Object.prototype。这意味着,该对象可以访问 Object.prototype 中定义的所有属性和方法。

我们以一个简单的示例来说明:

const person = {
  name: 'John Doe',
  age: 30
};

当我们创建 person 对象时,JavaScript 就会在幕后创建一个新的对象,并将该对象的原型设置为 Object.prototype。这意味着,person 对象可以访问 Object.prototype 中定义的所有属性和方法,包括 toString()valueOf()hasOwnProperty() 等。

我们可以使用 Object.getPrototypeOf() 方法来获取对象的原型:

console.log(Object.getPrototypeOf(person));

输出结果为:

Object {}

这意味着,person 对象的原型是 Object.prototype

原型链上的层层继承

每个对象都有一个原型,而原型的原型又有一个原型,如此层层向上,最终都会到达 Object.prototype。这种层层继承的关系称为原型链。

我们可以使用 __proto__ 属性来访问对象的原型。例如,我们可以使用 person.__proto__ 来访问 person 对象的原型:

console.log(person.__proto__);

输出结果为:

Object {}

这意味着,person 对象的原型是 Object.prototype

为什么任何对象最终都继承了 Object 对象?

因为 Object.prototype 是原型链的根节点,任何对象都必须通过原型链最终到达 Object.prototype。因此,任何对象都继承了 Object.prototype 中定义的所有属性和方法。

结语

在 JavaScript 中,任何对象都继承了 Object 对象,这并非一句空话。通过原型链的层层继承,任何对象都可以访问 Object.prototype 中定义的所有属性和方法。这使得 JavaScript 语言更加灵活和强大。