【发布时间】:2010-10-15 16:21:38
【问题描述】:
我试图弄清楚 Javascript 函数的行为方式。它是一个函数还是一个对象或两者兼而有之?
【问题讨论】:
-
Is Function really an Object 的可能重复项
标签: javascript
我试图弄清楚 Javascript 函数的行为方式。它是一个函数还是一个对象或两者兼而有之?
【问题讨论】:
标签: javascript
javascript 中的函数是一流的对象。所以它们既是函数又是对象。
因为它们是第一类对象,你可以将一个变量分配给一个函数并赋予它属性,例如:
var addName=function(){};
addName.blah = 1;
如果它们不是一流的对象,您将受限于这种语法,但您可以同时使用两种方法:
function addName(){}
【讨论】:
两者兼而有之。
一切在 Javascript 中都是“数据”,包括函数。我觉得这是一种很好的描绘方式:
var f = function() { alert('foo'); };
这是对变量的赋值,与你写的没有什么不同,比如:
var f = new String('foo');
无论哪种方式,您都可以编写类似f.bar = 'baz'; 的语句来为您的对象分配属性。唯一的区别是() 运算符(如果您愿意的话)仅在您拥有的变量恰好是一个函数时才有效。 f() 如果是函数,则有意义; f() 如果是字符串或其他数据,则毫无意义。
【讨论】:
var f = "foo"; f.bar = 4;。发生的情况是f.bar 中的f 被转换为String,然后分配其bar 属性,然后转换后的String 值丢失,因为没有任何引用它。但你可以做到 =)
在 JavaScript 中,所有函数都是对象。
函数是可以调用的对象。 (它们有一个内部 [[Call]] 属性)
【讨论】:
好吧,我不会说“JavaScript 函数是一流的对象”,因为每个人都已经说过了,但是如果您想了解更多关于函数的信息,请查看这个简短的页面:
http://jqfundamentals.com/book/ch02s09.html
顺便说一句,如果您打算学习 JavaScript 和 JQuery,那是一本免费的在线书籍。
【讨论】: