【发布时间】:2011-10-24 11:38:45
【问题描述】:
是否存在不是函数的 JavaScript 对象?
javascript: x=y=z=Object; alert([window.navigator.userAgent,x,y,z].join("\n\n"))
(有一个comment x,y,z 只是引用,在这种情况下,Object 也仅仅是对 function Object(){ ... } 的引用,因为 Object 的值被分配给x 它们是“相同的”。作为“证明”
javascript:x=Object;x.p=43;alert([x==Object,x===Object,x.p,Object.p])
展示
true,true,43,43
给定function Thing(){} x=new Thing() 使x 成为对象还是对对象的引用? new Thing() 和 Thing 呢?还是y 中的y=x=new Thing() 或y=x=Thing?如果Thing=function(){} 怎么办?区别是没有意义的。 “一切”(或者是?)是通过引用调用的,但可以通过评估字符串来强制调用。所以...)
javascript:
void function(x,y,z){
alert( [window.navigator.userAgent,x,y,z].join("\n\n") )
}(Object,Object,Object)
或
javascript:
void function(x){ (function (y){ (function (z){
alert( [window.navigator.userAgent,x,y,z].join("\n\n") )
})(y) })(x) }(Object)
(不太现实 - 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]);
显示34,17,hmmm 和,,,,43
)
甚至是对象数组
javascript:alert([window.navigator.userAgent,Object,Object,Object].join("\n\n"))
给予:
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3
函数对象(){ [本机代码] }
函数对象(){ [本机代码] }
函数对象(){ [本机代码] }
有很多对象不是Object。
正如answers 之一所指出的,如果对象被修改,它可能不是它自己。
危险!危险!威尔罗宾逊!
x=y=z=Object=null; alert([window.navigator.userAgent,Object,x,y,z].join("\n\n"));
参考资料
- Object and Function are quite confusing
- Difference between a constructor and an Object
- Is Function really an Object
- Is JavaScript function a "function" or an "object" or both?
- Every Object is a function and every function is Object - Which is Correct?
- Why in JavaScript is a function considered both a constructor and an object?
【问题讨论】:
-
@Ibu ...但并非所有对象都是函数 ;-)
-
@pst,谢谢你完成我的句子
-
但是...所有非文字对象都是函数实例化-
-
和
Object是function Object() { [native code] }通过javascript:alert(Object)等等...
标签: javascript function object