Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们如何证明javascript函数是对象?_Javascript_Function_Object - Fatal编程技术网

我们如何证明javascript函数是对象?

我们如何证明javascript函数是对象?,javascript,function,object,Javascript,Function,Object,我正在使用 var foo = function(){} typeof(foo)-返回函数而不是对象 虽然javascript的概念告诉我们javascript中的所有函数都是对象?这个测试怎么样 > x = function(){} <- function (){} > x.a = "Asd" <- "Asd" > x <- function (){} > x.a <- "Asd" >x=function(){} x、 a=“Asd”

我正在使用

var foo = function(){}
typeof(foo)
-返回函数而不是对象


虽然javascript的概念告诉我们javascript中的所有函数都是对象?

这个测试怎么样

>  x = function(){}
<- function (){}
>  x.a = "Asd"
<- "Asd"
>  x
<- function (){}
>  x.a
<- "Asd"
>x=function(){}
x、 a=“Asd”
x
x、 a
x=1
x、 a=123
x
x、 a

首先也是最重要的是,规范在很多地方明确指出它们是对象,包括定义术语“函数”的地方:

功能

可以作为子例程调用的对象类型的成员

根据经验,有很多方法可以证明这一点,但最简单的方法之一是为其上的属性赋值:

var foo=function(){};
foo.myProperty=“我的价值”;
console.log(foo.myProperty);//“我的价值”
请参阅我的价值

它们将功能检测为对象,例如

var func = function(){};
Object(func) === func; // true  -->  func is an object
如果您想要更正式的证明,您需要查看规范,例如

函数是可调用的对象


你可以很简单地证明这一点:

console.log(Object.getPrototypeOf(Function.prototype));
log(Object.prototype==Object.getPrototypeOf(Function.prototype));
//或者,是邪恶的
Object.prototype.testFn=()=>console.log('存在于所有对象上');
({}).testFn();
[]testFn();
(新编号(5)).testFn();

Math.sqrt.testFn()console.log(Function.prototype对象实例)

它们被创建为表达式,可以赋值、比较(通过引用)以及可以添加任意属性,这一事实应该足够了,不是吗?
var func = function(){};
Object(func) === func; // true  -->  func is an object