看看chatGPT是怎么理解原型链的?

138 阅读2分钟

原型链是 JavaScript 中非常重要的概念,用于实现对象间的继承关系。

    每个 JavaScript 对象都有一个内置的属性 [[Prototype]],指向它的原型对象,而这个原型对象也又有自己的原型,以此类推,形成了一条链,称为原型链。

    在查找对象的某个属性时,如果当前对象不存在该属性,则继续在其原型对象上查找,直到找到或者沿着原型链查找到最后一个对象(通常是 null)为止。这种继承关系可以让我们简化代码,以更简单的方式实现对象间的继承。

用代码来说明原型链的工作原理

假设我们有一个对象 person,这个对象有一个名为 name 的属性:

var person = {
 name: 'John Doe'
};

现在,我们可以创建一个新对象,称为 employee,并将 person 对象设置为它的原型:

var employee = Object.create(person);

此时,employee 对象可以访问到来自 person 对象的所有属性。例如,我们可以问 employee 对象的 name 属性:

console.log(employee.name); // 'John Doe'

如果在 employee 对象中没有找到请求的属性,它将继续在原型链上搜索。因此,在这种况 下,JavaScript 会在原型链的 person 对象中找到请求的 name 属性。 通过使用原型链,我们可以在不修改现有对象的情况下,创建一个新对象,并在新对象中用现 有对象的属性和方法。

Object.create(person)

Object.create(person) 是 JavaScript 中的一种创建对象的方式,通过使用 Object.create 函数,可以创建一个新的空对象,并将它的原型设置为 person 对象。

意思是创建一个空对象,该对象的原型指向 person 对象,它的意义在于创建一个对象,该对象可以从 person 对象继承方法和属性。

例如:

const person = {
  name: "John Doe",
  greet: function() {
    console.log(`Hello, my name is ${this.name}`);
  }
};

const employee = Object.create(person);
employee.role = "Engineer";

employee.greet(); // outputs "Hello, my name is John Doe"
console.log(employee.name); // outputs "John Doe"
console.log(employee.role); // outputs "Engineer"

在这个例子中,创建了一个 person 对象,并且通过 Object.create 函数创建了一个 employee 对象,该对象继承了 person 对象的 greet 方法和 name 属性。因此,当调用 employee 对象的 greet 方法时,它会输出 "Hello, my name is John Doe",因为该方法继承自 person 对象。