我们如何证明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