每个JavaScript对象都是函数吗?

Eki*_*kim 5 javascript function object

是否有一个不是函数的JavaScript对象?

javascript: x=y=z=Object; alert([window.navigator.userAgent,x,y,z].join("\n\n"))
Run Code Online (Sandbox Code Playgroud)

(有一种意见认为x,y,z仅仅是引用在这种情况下Object,也仅仅是一个参考function Object(){ ... },因为Object的值分配给x它们都是'相同’.作为'证据’

javascript:x=Object;x.p=43;alert([x==Object,x===Object,x.p,Object.p])
Run Code Online (Sandbox Code Playgroud)

显示器

true,true,43,43
Run Code Online (Sandbox Code Playgroud)

由于function Thing(){}x=new Thing()使x对象或一个参考?怎么样new Thing()Thing?或者yy=x=new Thing()y=x=Thing?怎么Thing=function(){}办?区别是没有实际意义的."Everything"(或者它是?)是通过引用调用的,但是可以通过评估字符串来强制逐个调用.所以...)

javascript:
    void function(x,y,z){
        alert(  [window.navigator.userAgent,x,y,z].join("\n\n") )
    }(Object,Object,Object)
Run Code Online (Sandbox Code Playgroud)

要么

javascript:
    void function(x){  (function (y){  (function (z){
             alert(  [window.navigator.userAgent,x,y,z].join("\n\n") )
         })(y) })(x) }(Object)
Run Code Online (Sandbox Code Playgroud)

(不是没有实际意义 - function必须使用(...)或强制的价值观void.(...)微妙的细微差别:

javascript:       /* 43.p gives a runtime error but not ... */
    alert([ (43).p=34, 43["q"]=17, (x=43).z="hmmm" ]); 
    alert([ 43["p"], (43).z, x.p, x["z"], x]);
Run Code Online (Sandbox Code Playgroud)

显示 34,17,hmmm,,,,43

)

甚至是一个对象数组

javascript:alert([window.navigator.userAgent,Object,Object,Object].join("\n\n"))
Run Code Online (Sandbox Code Playgroud)

得到:

Mozilla/5.0(X11; U; Linux i686; en-US; rv:1.9.2.3)Gecko/20100423 Ubuntu/10.04(lucid)Firefox/3.6.3

function Object(){[native code]}

function Object(){[native code]}

function Object(){[native code]}

有许多对象不是Object.


正如其中一个答案中所指出的,如果对象被修改,它可能不是它本身.
危险!危险!威尔罗宾逊!

x=y=z=Object=null; alert([window.navigator.userAgent,Object,x,y,z].join("\n\n"));
Run Code Online (Sandbox Code Playgroud)

引用

g.d*_*d.c 6

您没有创建对象,您创建了对Object函数的引用.如果你想要那些是对象,你可以这样做:

x = y = z = {}
Run Code Online (Sandbox Code Playgroud)

然后alert(x)会回来object [Object].

(希望)包含注释 - 默认情况下Object是构造对象的函数.如果你重新分配名称对象(Firefox至少似乎允许我,没有测试过所有浏览器)那么Object将不再是一个函数,它将是你分配给它的任何东西.那么,答案是"不",对象并不总是一个函数,但除非已经明确地重新声明,否则它应该是.据Firebug说:

>>> Object
Object()
>>> Object = {}
Object {}
>>> Object
Object {}
Run Code Online (Sandbox Code Playgroud)

看似可以重新分配.如果有的话,我无法保证会产生什么样的影响.