MST

星途 面试题库

面试题:JavaScript构造函数的原型链与对象字面量创建对象的关联

已知通过构造函数创建了一个对象,并且对象字面量也创建了一个对象。请解释这两种方式创建的对象在原型链上的联系与不同。假设构造函数为`function Person(name) { this.name = name; }`,对象字面量为`let obj = {age: 20}`,如何通过代码验证你所阐述的内容?
24.7万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

联系

  1. 原型链继承:通过构造函数Person创建的对象和通过对象字面量obj创建的对象,都基于JavaScript的原型链继承机制。它们最终都继承自Object.prototype
  2. __proto__属性:两种方式创建的对象都有__proto__属性,指向它们的原型对象。

不同

  1. 构造函数创建的对象
    • __proto__指向构造函数的prototype属性。例如通过new Person('John')创建的对象,其__proto__指向Person.prototype
    • 可以通过构造函数的prototype属性为所有通过该构造函数创建的对象添加共享属性和方法。
  2. 对象字面量创建的对象
    • __proto__直接指向Object.prototype。因为对象字面量本质上是Object构造函数的语法糖,相当于new Object({age: 20})
    • 没有像构造函数那样有一个特定的构造函数prototype作为直接原型(除了Object.prototype)。

代码验证

function Person(name) {
    this.name = name;
}
let obj = {age: 20};
let personObj = new Person('Tom');

// 验证构造函数创建对象的原型链
console.log(personObj.__proto__ === Person.prototype); // true,表明构造函数创建对象的__proto__指向构造函数的prototype
console.log(Person.prototype.__proto__ === Object.prototype); // true,表明构造函数的prototype最终指向Object.prototype

// 验证对象字面量创建对象的原型链
console.log(obj.__proto__ === Object.prototype); // true,表明对象字面量创建对象的__proto__直接指向Object.prototype