首页 | 博客群 | 公社 | 专栏 | 论坛 | 图片 | 资讯 | 注册 | 帮助 | 博客联播 | 随机访问
手工清理流氓软件(1)--工具篇- -| 回首页 | 2006年索引 | - -转:Java替代C语言的可能性

javascript对象之胡说八道

关键词AJAX    javascript    对象                                          

本来想静下心来好好研究一下javascript对象的语义结构的,不知道是javascript的对象关系混乱呢,还是我的脑子混乱。因为我不是什么大师(当然,更不是李大师),所以,暂且认为我脑子混乱吧。既然脑子混乱,那写出来东西的也是胡说八道了。

首先写这么个代码

Function.prototype.o = "Function Prototype";

document.writeln("<p>Object.o: "+ Object.o + "</p>");

document.writeln("<p>Function.o: "+ Function.o + "</p>");

document.writeln("<p>Array.o: "+ Array.o + "</p>");

function class1(){}

document.writeln("<p>class1.o: "+ class1.o + "</p>");

运行后发现,所有的结果都是"Function Prototype",我们可以得出第一个结论:任何类对象都是Function的对象,这其中也包括Object以及Function本身。也就是说,他们都是new Function的返回值。

把上段代码改一下

Function.prototype.o = "Function Prototype";处的代码改成Object.prototype.o = "Object Prototype";

再运行,结果是"Object Prototype",这也不难理解,javascript的所有对象都是Object的对象吗,那所有的类对象应该也不例外。

那Object和Function到底又是什么关系呢?我们再做个实验,把第一段代码Function.prototype.o = "Function Prototype";后面加上Object.prototype.o = "Object Prototype";,同时在末尾加上document.writeln("<p>Function.prototype.o: "+ Function.prototype.o + "</p>");一行,打印出来的结果竟然都是"Function Prototype",可是我明明把Object.prototype.o = "Object Prototype";放到了Function.prototype.o = "Function Prototype";后面啊。这个语义意味着Function类动态继承自Object,因为Function是子类,所以在它里面实现的操作被优先使用。

我们似乎得出这样一个结论:Object类是Function类的对象实例,而Function类却继承自Object类。逻辑上似乎也讲的通,一个讲对象实现关系,一个讲类的继承关系,不在一个层面上。但给人一种蛋生鸡,还是鸡生蛋的感觉。不知道Ajax的大规模使用,将会给这个语言带来什么。

另:当然,谈javascript的对象结构,纯属胡扯,因为javascript在IE上都是IDispatchEX和Activex Script实现的,那些类,其实是个已经被构建出来的IDispatchEx对象,而所谓的new,也是对prototype对象的复制,类对象和new出来的对象分别存在一个大列表里,通过名字字符串来存取。而对Function和Object的关系,用谁的prototype被优先复制来解释,似乎更贴切些。

【作者: 清气上升】【访问统计:】【2006年12月19日 星期二 01:08】【注册】【打印

Trackback

你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=5969455

回复

- 评论人:燕燕   2006-12-21 00:18:37   

看不懂

验证码:   
评论内容: