gpt4 book ai didi

javascript - 是否可以创建一个 [[prototype]] 引用另一个函数的函数

转载 作者:行者123 更新时间:2023-11-29 15:03:35 25 4
gpt4 key购买 nike

我想创建函数对象(是的,所有函数都是对象),对原型(prototype)继承有一些控制,也就是说,我希望一个函数从另一个函数继承。

我可以创建具有原型(prototype)继承的对象,并且知道设置函数的原型(prototype)属性作为构造函数来初始化对象的 [[prototype]] 属性。

但是,在创建函数时,我必须使用函数运算符或函数构造函数。我可以尝试调配 Function.prototype,但 (1) 不知道它是否可写,并且 (2) 这看起来很危险 [不过,我应该尝试这样做]。

顺便说一句:我只关心在 node.JS 中为 V8 执行此操作,因此如果有仅适用于该环境的方法,那将是可以接受的。

为了记录,我看到了这个: Is it possible to create a function with another prototype than Function.prototype?

最佳答案

在 V8(以及除 IE 之外的大多数其他浏览器/引擎)中,您可以通过设置 __prototype__ 来更改对象的原型(prototype)。 __proto__属性。设置 prototype如果该函数作为构造函数调用,属性将改为更改用于创建对象的原型(prototype)。这不应该是你想要的。

据我所知,目前还没有符合标准的方法来直接“子类化”一个函数(或数组)。只有 Object.create , 但没有 Function.createArray.create .

编辑: 我刚刚意识到函数对象没有 __prototype__属性并更改/设置它不会将对象变成函数。 我相信尽管我最近刚刚看了 Brendan Eich(JavaScript 的创造者)的演讲,他在演讲中谈到了 Object.create 的函数和数组等价物。 .事实上,谷歌搜索“Function.create brendan eich”会显示 the following blog post by Eich他在其中谈到了他希望实现 Function.create 和 Array.create。

编辑 2: 好吧,我搞砸了。差不多。非标准属性当然是 __proto__而不是 __prototype__ .设置 __proto__适用于有一些限制的功能,这些限制是:

  1. 能够调用 aFunction您必须使用实际函数对其进行初始化,例如:

    var aFunction = function () {};

    这很重要。调用函数不会访问原型(prototype)链,因此如果您定义 aFunction作为一个对象并简单地设置 __proto__属性,您将无法调用 aFunction .

  2. 您现在可以将任何其他功能分配给 aFunction.__proto__如果在 aFunction 上找不到属性,读取任何成员(包括方法)将正确委托(delegate)给原型(prototype)链本身。

  3. 调用 aFunction()将始终调用最初在 aFunction 时声明的函数已定义且永远不会调用 aFunction的原型(prototype)函数。所以函数体不受继承。

抱歉,首先搞砸了属性的名称。希望这对您有所帮助。

关于javascript - 是否可以创建一个 [[prototype]] 引用另一个函数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6206503/

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