gpt4 book ai didi

javascript - 如果函数是对象,那么函数体到哪里去了?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:04:56 24 4
gpt4 key购买 nike

如果函数是对象,那么函数体到哪里去了?

让我澄清一下我的困惑。函数是对象,好吧。我可以将对象视为由字符串键和任意类型的值组成的 HashMap 。我可以这样做:

function Square(size) {
Rectangle.call(this, size, size);
}
Square.prototype = new Rectangle();

我只是把 Square 当作一个普通对象,并通过给它分配一个新值来弄乱它的 prototype 属性。但是,如果函数只是对象(或 HashMap ),那么函数体(在此示例中 Rectangle.call(this, size, size);)存储在哪里?

我认为它必须存储为某些属性的值,可能如下所示:

console.log(Square.executableBody); // "Rectangle.call(this, size, size);"

显然,事实并非如此。有趣的是,在阅读 Nicholas C. Zakas 的“The Principles of Object-Oriented JavaScript”时,我偶然发现了这个:

[...] functions are actually objects in JavaScript. The defining characteristic of a function - what distinguishes it from any other object - is the presence of an internal property named [[Call]]. Internal properties are not accessible via code [...] The [[Call]] property is unique to functions and indicates that the object can be executed.

这可能是我在上面寻找的属性(property)。不过,它没有详细说明。函数的主体是否实际存储在 [[Call]] 属性中?如果是这样,执行是如何进行的?不幸的是,我无法找到有关[[Call]] 的更多信息,Google 主要提供有关函数的call 方法的信息...

一些澄清将不胜感激! :)

最佳答案

它成为另一个内部属性的值,称为[[Code]]:

13.2 Creating Function Objects
Given an optional parameter list specified by FormalParameterList, a body specified by FunctionBody, a Lexical Environment specified by Scope, and a Boolean flag Strict, a Function object is constructed as follows:

[...]

  1. Set the [[Code]] internal property of F to FunctionBody.

If so, how does execution work?

调用函数基本上是调用内部的[[Call]]方法,在http://es5.github.io/#x13.2.1中有描述。 .我想重要的一步是:

  1. Let result be the result of evaluating the FunctionBody that is the value of F's [[Code]] internal property.

关于javascript - 如果函数是对象,那么函数体到哪里去了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25814743/

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