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

时间:2014-10-09 13:22:08

标签: javascript function object

当我学习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"}

所以我有点困惑如何协调对象和对象是名称/值对的集合,但函数不是名称/值对的集合。

1 个答案:

答案 0 :(得分:3)

我认为这是一个很好的问题。函数和对象之间的界限可能看起来像是一个模糊的概念,但我根本不建议使用“对象是键和值的集合”这一定义来考虑函数作为对象。

您可以查看W3C objects article和(特别是)W3C function article 看到一个函数永远不会被实际调用和对象。

我认为函数的情况表明,对象可以被视为不仅仅是“属性的集合,而属性是名称和值之间的关联”,但实际上它通常是。

我建议的关于它的对象性质的函数的定义:

函数共享所有常规对象的特性,但它是一个特殊的对象,它可以对“()”运算符作出反应,评估函数的内部逻辑。