理解JavaScript——对象

对象

外物归宗,一切皆为对象(Object)——所有东西的老祖宗都是object。我用两个不同颜色的字体来划出Object和object,前者首字母大写,后者首字母小写。为什么要这么书写呢?首先区分下“对象”和“原型”。

举例:对象=鱼,原型=生物。同时:对象=鸟,原型=生物。

可以说,鱼和鸟都是对象,也可以说他们都是生物。同样的,生物,也是一个对象(最原始的对象)。迷糊?你是人,我是人,难道我们的祖宗就不是人啊?

在JavaScript中,Object对象同等于 Function对象。他们的老祖宗都是object。Object是一个存储属性,而Function是一个执行过程。【P1

就像鲤鱼(对象)和麻雀(对象),它们具备生物(原型)的特征:具有生命特征。但是又具备了相应对象的特征:游泳、飞翔。

请测试:

Code1

alert(typeof Object);

alert(typeof Function);

两个结果都是“function”。天啊,彻底乱了。不是说Function是object么?

在测试:

Code2

alert(typeof Object.prototype);

alert(typeof Function.prototype);

这次的结果正常了,Object的原型正是object,而Function的原型也像是我们理解的function。但是考虑下

最后来一个测试:

Code3

alert(Object);

alert(Function)

结果:function Object()...和function Function().... 。和原型一样。

想必所有的读者都已经彻底不知道我在做什么了。说心里话,我在对这些进行测试的时候也是茫然万分。直到……

Code4

function object()

{

this.prototype = something;

this.constructor = something;

this.toString();

this.valueOf();

}

function Object(){ }

Object.prototype = new object();

function Function(){ }

Function.prototype = new object();

function String(){ }

String.prototype = new Object();

function Number(){ }

Number.prototype = new Object();

and so forth............

不管你看得懂开始看不懂,都不重要,这一篇文章千万别深入理解,感觉可以明悟一丝丝便可,否则你将会越来越迷糊。重要的是,你要理解对象与祖宗。JavaScript不是那么容易的。当然也极有可能是笔者的理解错误,如带来不便,敬请见谅!包括之后相关系列的文章均为如此!

【p1】如果你觉得分不清:object、 Object和Function,请一定要尝试以下代码,并告诉自己object代表的是本机代码(祖宗),所以我们无法声明、使用object。

Code5

Function.prototype.read = function(){};

for(var i in Function)

alert(i)

Object.prototype.write = function(){};

for(var i in Object)

alert(i)

alert(Object.prototype.isPrototypeOf(Object.prototype)); // true

alert(Object.prototype.isPrototypeOf(Person.prototype)); // true