gpt4 book ai didi

javascript - 创建与其他函数链接的函数对象?

转载 作者:行者123 更新时间:2023-12-02 17:10:07 24 4
gpt4 key购买 nike

我知道,

  • 我们可以使用以下命令创建新对象并链接给定对象作为其原型(prototype) Object.create()
  • 我们可以使用 new 创建新对象关键词与任何函数一起创建一个与该函数链接的对象原型(prototype)对象。

但是,我在浏览器控制台中看到一些功能,例如 HTMLBodyElement , HTMLElement , XMLHttpRequest ,

HTMLElement.__proto__ === Element

HTMLElement是一个函数,其原型(prototype)为 Element这也是一个函数。我的问题是如何HTMLElement已经创建以及它的原型(prototype)如何与 Element 链接功能。他们用来创建 HTMLElement 的语法是什么?

最佳答案

正如 Felix Kling 在评论中指出的那样,所讨论的功能是由环境提供的。因此,如果不通读浏览器 JS 引擎的源代码或者(如果幸运的话)它的文档,您将不会发现“HTMLElement 是如何创建的”。

但我想你的问题是如何自己创建一个这样的构造,这相当简单。以下是您可以使用的几种方法之一。

function Foo(){}
Foo.prototype = Element.prototype;

验证:

(new Foo()) instanceof Element

例如,在您的控制台中,您将得到true。我宁愿将其称为mixin,不知何故。

另一种方法是,将 Foo 保留为构造函数:

Foo.prototype = new Bar();

其中 Bar 是“父”类。这样做的优点是在构造函数中创建的函数和变量也可供子类使用。请注意,Element 不允许您直接构造新实例,因此我选择了不同的父级。

如果您想添加更多方法和字段,您可以在“链接”原型(prototype)(您的话)之后执行此操作:

Foo.prototype.foobar = "foobar";
Foo.prototype.getFoobar = function() {
return this.foobar;
}

或者在构造函数中执行此操作。

原型(prototype)继承是巧妙且有趣的事情,但可能很难理解。玩一下。

更新

关于OP的假设误解(见评论),不要将prototype__proto__混淆。

一般来说,__proto__ 存储对象构造函数的prototype。在这种情况下,这意味着 (new Foo()).__proto__ === Foo.prototype__proto__ 存储类的实例之间共享的方法和字段。

因此,Foo.__proto__ === Function.prototype === Empty 与类 Foo 的实际实例的继承无关。

请参阅以下两个问题以获取更多信息:

关于javascript - 创建与其他函数链接的函数对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24903061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com