函数对象如何,而不是名称/值对

How are functions objects but not name/value pairs?

本文关键字:值对 对象 函数      更新时间:2023-09-26

在学习javascript时,我将对象理解为名称/值对的集合。例如,直接取自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects

An object is a collection of properties, and a property is an association between a name and a value.

我知道函数也是对象。例如,我可以做:

function myFunc() { return "I'm a function"; }
myFunc.name = "Bob";

myFunc.name

将打印"Bob"。

然而,

myFunc

将打印

function myFunc() { return "I'm a function"; }

它不是名称/值对;这是一个函数。

而如果我做了这样的事情:

var myObj = { prop1: "hello", prop2: "world" }
myObj

将打印

Object {prop1: "hello", prop2: "world"}

因此,我有点困惑如何调和函数是对象,对象是名称/值对的集合,而函数不是名称/值配对的集合。

我认为这是一个很好的问题。函数和对象之间的界限在其核心可能看起来是一个模糊的概念,但我不建议使用"对象是键和值的集合"的定义将函数视为对象。

您可以查看W3C对象文章,尤其是W3C函数文章查看函数从未被实际调用和对象。

我认为函数的例子很好地表明,对象可以被视为不仅仅是"属性的集合,属性是名称和值之间的关联",但在实践中通常是这样

关于函数的对象性质,我提出了一个定义:

函数共享常规对象的所有功能,但它是一个非凡的对象,因为它可以对"()"运算符做出反应,该运算符评估函数的内部逻辑