NodeJS JavaScript语言:将方法分配给另一个对象,而不在第二个类体中定义该方法

nhjlsmyf  于 2022-12-12  发布在  Node.js
关注(0)|答案(2)|浏览(237)

我在mozila开发人员站点找到了这段代码:

class Car {
  sayHi() {
    console.log('Hello from car');
  }
}
        
class Bird {
         
}
        
const car = new Car();
const bird = new Bird();

bird.sayHi = car.sayHi;
bird.sayHi(); //Why it works?!!!

最后一行如何以及为什么不定义第二个类中的方法或从Car类继承该方法?

kmpatx3s

kmpatx3s1#

让我们来看看这里到底发生了什么。
1.为Car定义类,这将创建一个名为Car的构造函数,并为该类创建一个原型。
1.在类定义中定义sayHi()方法,这样就将sayHi方法添加到Car原型中。
1.为Bird定义类,创建一个名为Bird的构造函数,并为该类创建一个原型。
1.创建每个类的一个示例,这将创建一个对象,分配相应的原型并运行构造函数(如果有)。
1.您执行bird.sayHi = car.sayHi;。它有两个部分。首先,它读取car.sayHi。由于car对象上没有名为sayHi的自有属性,解释器检查该对象的原型链并找到原型上的sayHi方法。然后,它获取找到的方法并将其作为自身属性分配给bird对象(直接在bird对象上的属性。请记住,一个方法就是一个存储在对象上的函数。2你可以从对象上获取这个函数,然后像使用其他函数一样使用它(当从其原始上下文中移除时,它可能正常工作,也可能不正常工作-这取决于它的用途)。
1.然后,执行bird.sayHi(),解释器在bird对象中查找自己的属性sayHi,找到您刚刚赋值的属性,获取该方法并执行,您在控制台中得到输出。

ajsxfq5m

ajsxfq5m2#

函数是第一类对象。
在内部,car是一个空对象,其原型定义了sayHi属性。
然后,使用bird.sayHi = car.sayHi设置bird.sayHi属性。

相关问题