首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >推理并找到类实例中最“父”的原型对象?

推理并找到类实例中最“父”的原型对象?
EN

Stack Overflow用户
提问于 2021-05-11 12:32:22
回答 1查看 22关注 0票数 0

日安。

我正在上JS课程,现在我们正在讨论原型。我的问题与原型对象有关。

下面是代码示例:

代码语言:javascript
复制
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),这里的原型是什么?它在看全局物体吗?那会是窗户的对象吗?这部分对我来说还是有点不稳定。

非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-11 12:39:00

虽然你写的没有错,但房地产更简单(IMO)。

如果您试图访问对象上的属性,引擎将首先检查对象本身(在您的例子中是wyatt)是否具有该属性。如果不是,它将查看对象的原型(也是一个对象),并重复这些步骤,直到找到属性或对象不再具有原型为止。这才是真正意义上的。

对象只能有一个原型。您可以将它看作是分配给另一个对象的引用的“内部”属性。

我想下一个问题是,一个原型是如何分配给一个对象的?您已经知道了一种方法:extends关键字。

也许您缺少的一点是,对象的默认原型是Object.prototype

代码语言:javascript
复制
console.log(Object.prototype === Object.getPrototypeOf({}));

然而,Object.prototype没有一个原型:

代码语言:javascript
复制
console.log(Object.getPrototypeOf(Object.prototype));

这就是原型链结束的地方。

总之,引擎并不认为“哦,我现在必须看Object.prototype”,它只知道看看对象的原型,不管它是什么。只是Object.prototype是“普通”对象的默认原型。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67486839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档