当我学习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"}
所以我有点困惑如何协调对象和对象是名称/值对的集合,但函数不是名称/值对的集合。
答案 0 :(得分:3)
我认为这是一个很好的问题。函数和对象之间的界限可能看起来像是一个模糊的概念,但我根本不建议使用“对象是键和值的集合”这一定义来考虑函数作为对象。
您可以查看W3C objects article和(特别是)W3C function article 看到一个函数永远不会被实际调用和对象。
我认为函数的情况表明,对象可以被视为不仅仅是“属性的集合,而属性是名称和值之间的关联”,但实际上它通常是。
我建议的关于它的对象性质的函数的定义:
函数共享所有常规对象的特性,但它是一个特殊的对象,它可以对“()”运算符作出反应,评估函数的内部逻辑。