【发布时间】:2014-10-09 13:22:08
【问题描述】:
在学习 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"}
所以我有点困惑如何协调函数是对象和对象是名称/值对的集合,而函数不是名称/值对的集合。
【问题讨论】:
-
请记住,对象有一个
.toString()属性,该属性控制对象如何呈现为字符串。还要记住,开发者控制台可以做任何它想做的事。函数实际上是真实的对象。对象的性质不取决于它在转换为字符串或转储到控制台时的样子。 -
但即使忽略它在控制台中的显示方式。我仍然不明白“函数是对象,对象是名称/值对的集合”。我看不到函数 -> 名称/值对如何。
-
@mattm
var foo = function() {}; foo.keyName = "value";这会导致foo拥有一个具有名称/值的属性。您可以添加任意数量的属性,创建名称/值对的集合。 -
函数是对象,但它们也是函数;它们具有超越其简单的“客观性”的内在本质。如果您将属性添加到函数,就好像它是普通对象一样,然后(例如)将其传递给迭代属性并显示其值的函数,则函数对象将看起来非常正常。当然,除了它的“对象性”之外,函数还可以作为函数调用。
-
@Pointy:“函数是对象,但它们也是函数;它们具有超越其简单的‘对象性’的内在本质”这清楚了很多。
标签: javascript function object