日安。
我正在上JS课程,现在我们正在讨论原型。我的问题与原型对象有关。
下面是代码示例:
class Pet {
constructor(name, age) {
this.name = name;
this.age = age;
}
eat() {
return `${this.name} is eating!`
}
}
class Dog extends Pet {
bark() {
return "Woof!"
}
eat() {
return `${this.name} scarfs his food!`
}
}
const wyatt = new Dog("Wyatt", 13);如果我输入控制台:wyatt.eat()
(1)控制台将在上查找eat方法。如果它找到了它,它将运行该方法。
(2)如果它在那里找不到它,它就会为它检查宠物原型,这是因为扩展关键字。
(3)如果没有找到它,控制台就会在“对象原型”(导师的表述方式)上寻找它。
我得到了上述所有内容,而且类实例具有它所引用的原型模板,可能还有其他模板。让我困惑的是具体的步骤(3),这里的原型是什么?它在看全局物体吗?那会是窗户的对象吗?这部分对我来说还是有点不稳定。
非常感谢。
发布于 2021-05-11 12:39:00
虽然你写的没有错,但房地产更简单(IMO)。
如果您试图访问对象上的属性,引擎将首先检查对象本身(在您的例子中是wyatt)是否具有该属性。如果不是,它将查看对象的原型(也是一个对象),并重复这些步骤,直到找到属性或对象不再具有原型为止。这才是真正意义上的。
对象只能有一个原型。您可以将它看作是分配给另一个对象的引用的“内部”属性。
我想下一个问题是,一个原型是如何分配给一个对象的?您已经知道了一种方法:extends关键字。
也许您缺少的一点是,对象的默认原型是Object.prototype。
console.log(Object.prototype === Object.getPrototypeOf({}));
然而,Object.prototype没有一个原型:
console.log(Object.getPrototypeOf(Object.prototype));
这就是原型链结束的地方。
总之,引擎并不认为“哦,我现在必须看Object.prototype”,它只知道看看对象的原型,不管它是什么。只是Object.prototype是“普通”对象的默认原型。
https://stackoverflow.com/questions/67486839
复制相似问题