[英]javascript: functions are also objects - true or false?
我正在研究(或尝试)高级javascript主题,例如原型,构造函数,函数属性等。一些事实使我得出结论, javascript函数也是对象 。
我知道函数的数据类型是function
,因为:
> typeof function(){}
'function'
但无论如何:
length
属性 Function.prototype
的原型是Object.prototype
(原型链):
> Object.getPrototypeOf(Function.prototype) === Object.prototype true
有人可以说清楚javascript函数是否是对象? 如果是这样,为什么typeof function == 'function'
和typeof [] == 'object'
; 如果不是,我上面提到的观点如何?
编辑:另一个问题-什么是头等舱对象 ?
一切(几乎)都是javascript中的对象。
Function instanceof Object // true
是的,函数是javascript中的对象。 这就是为什么Objectof的((function(){}) instanceof Object
是true。
typeof function == 'function'
,因为它们也是函数。 函数从Object原型继承。
用对象初始化程序实例化的任何对象 ( 对象常量 , 数组常量 , 新的Constructor )都将具有“对象”类型。
其他答案已经解决了这一部分,但是可以,函数是对象。 因此,关于您的其他问题。
为什么typeof function =='function'和typeof [] =='object'
Type of val Result
----------------------------------------------
Undefined "undefined"
Null "object"
Boolean "boolean"
Number "number"
String "string"
Object (native and does "object"
not implement [[Call]])
Object (native or host and "function"
does implement [[Call]])
Object (host and does not Implementation-defined except may
implement [[Call]]) not be "undefined", "boolean",
"number", or "string".
什么是头等舱物品?
据说函数是JavaScript中的“一流对象”或“一流公民”,因为它们可以作为常规对象分配给变量,传递给其他函数并由其他函数返回。 这就是启用JavaScript功能的本质。
我在早期学习JavaScript时就遇到了这个问题。 这是JavaScript的核心概念:函数是ARE对象。 但是,对象不一定是功能。 原因? “功能”类型表示对其他对象和变量起作用的过程或方法。 因此,他们没有创建名为“功能对象”的类型,而是选择了名称“功能”。 即使在最高级别的程序员中,这也引起了进一步的混乱。
但简单地说,功能就是对象。 因此,它们也可以包含自己的属性(就像任何对象一样)。 至此,您可以创建此函数包含的私有变量/对象,并且每个新实例都将获取该私有变量/对象。 重要的是要注意,函数中包含的任何对象都不会具有全局作用域。 但是,“ Object.prototype”中的对象具有全局作用域(并且始终存在)。
为了回答您的最后一个问题,一流对象通常是在如何传递,创建或修改方面没有任何限制的实体。 下一级别(第二,第三,...)具有限制其使用的限制层。 显然,所有这些都有很好的用例。
编辑:我知道每个人都将他杀死。 但是请查看道格拉斯·克罗福德(Douglas Crocford)的教.。 他很好地研究了高级JS。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.