我认为,我对之前的回答过于隐喻和神秘。澄清如下。
Array、Boolean、Date、Function、Number、RegExp、String 的实例是一个对象,但增强了针对每种类型的方法和属性。例如,数组具有预定义的length 属性,而通用对象则没有。
javascript:alert([].length+'\n'+{}.length)
展示
0
不明确的
从本质上讲,FF Gecko 解释器还区分了数组和通用对象,它们在评估语言结构时存在明显差异。
javascript:
ra=[ "one", "two", "three"]; ra.a=4;
ob={0:"one", 1:"two", 2:"three"}; ob.a=4;
alert(
ra +"\n\n"+
ob +"\n\n"+
ra.toSource() +"\n\n"+
ra.a +"\t .toSource() forgot me! \n\n"+
ra.length +"\t and my length! \n\n"+
ob.toSource());
ps=""; for(i in ra)ps+=i+" "; alert(ps); /* NB .length is missing! */
ps=""; for(i in ob)ps+=i+" "; alert(ps);
显示
一二三
[对象对象]
[“一二三”]
4 .toSource() 忘记了我!
3和我的长度!
({0:"一", 1:"二", 2:"三", a:4})
和0 1 2 a 和0 1 2 a。
关于所有对象都是函数的说法:
将任意对象实例用作123() 或"abc"() 或[]() 或{}() 或obj() 之类的函数在语法上和语义上都不正确,其中obj 是@987654332 以外的任何类型@,所以任意对象实例不是Function。然而,给定一个对象obj,它的类型为Array, Boolean, Date, ...,obj 是如何变成Array, Boolean, Date, ... 的?什么是Array, Boolean, Date, ...?
javascript:
alert([Array, Boolean, Date, Function,
Number, Object, RegExp, String] . join('\n\n') );
展示
function Array() {
[native code]
}
function Boolean() {
[native code]
}
function Date() {
[native code]
}
function Function() {
[native code]
}
function Number() {
[native code]
}
function Object() {
[native code]
}
function RegExp() {
[native code]
}
function String() {
[native code]
}
在任何情况下,对象类型都明确表示为function 定义,因此声明所有对象都是函数! (开玩笑的是,我故意模糊和模糊了对象实例与其类型的区别!不过,这表明“你不能没有另一个”,对象和函数!大写强调类型为反对实例。)
函数范式和对象范式似乎都是 JS 解释器低级内置原语的编程和实现的基础,例如 Math 和 JSON 和 true。
javascript:alert([Math, JSON, true.toSource()].join("\n\n"));
展示
[object Math]
[object JSON]
(new Boolean(true))
在开发 Javascript 时,以对象为中心的编程风格(OOP's - Object Oriented Programming style - “'s” 是我自己的双关语!)很流行,解释器同样被命名为 Java,以提供它更大的可信度。函数式编程技术被降级为更抽象和深奥的考试,研究自动机、递归函数、形式语言等理论,因此不受欢迎。然而,这些形式考虑的优势在 Javascript 中明显体现出来,特别是在 FF 的 Gecko 引擎中实现(即.toSource())。
Function 的 Object 定义特别令人满意,因为它被定义为递归关系!使用它自己的定义来定义!
function Function() { [native code] }
由于函数是一个对象,因此对于
function Object() { [native code] } 也有同样的看法。
大多数其他定义停顿为静态终端值。但是,eval() 是一个特别强大的原语,因此 String 也可以嵌入任意功能。
再次注意,上面使用的白话掩盖了对象类型和实例的区别。