繁体   English   中英

javascript:函数也是对象-对还是错?

[英]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'

typeof运算符仅遵循规范中定义的一组规则

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM