2011年01月17日
2011年01月17日
2011年01月17日
关于ASP开发中的对象整理如下: JavaScript 本地对象、内置对象、宿主对象
一直也搞不清“本地对象”、“内置对象”和“宿主对象”在JavaScript中到底谁是谁。分不清其中的关系,总是在自以为自己明悟了的时候发现自己其实一点都不清楚。-_-!!!
本地对象
ECMA-262 把本地对象(native object)定义为“独立于宿主环境的 ECMAScript 实现提供的对象”。
看定义有些不清楚,因为还未了解何为“宿主环境”的时候就引用了“宿主环境”这个概念,着实让人有些发晕。
不过,根据我强悍的文学功底,“宿主”一般是指寄生的生物选择的寄生体,这让我想起了“火影”里的“白”。简单说,就是用户的机器环境,包括操作系统和浏览器。
再来看一下,“本地对象”包含哪些内容:
Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError
由此可以看出,简单来说,本地对象就是 ECMA-262 定义的类(引用类型)。
内置对象
ECMA-262 把内置对象(built-in object)定义为“由 ECMAScript 实现提供的、独立于宿主环境的所有对象,在 ECMAScript 程序开始执行时出现”。这意味着开发者不必明确实例化内置对象,它已被实例化了。
同样是“独立于宿主环境”。根据定义我们似乎很难分清“内置对象”与“本地对象”的区别。而ECMA-262 只定义了两个内置对象,即 Global 和 Math (它们也是本地对象,根据定义,每个内置对象都是本地对象)。
如此就可以理解了。内置对象是本地对象的一种。而其包含的两种对象中,Math对象我们经常用到,可这个Global对象是啥东西呢?
Global对象是ECMAScript中最特别的对象,因为实际上它根本不存在,有点玩人的意思。大家要清楚,在ECMAScript中,不存在独立的函数,所有函数都必须是某个对象的方法。
类似于isNaN()、parseInt()和parseFloat()方法等,看起来都是函数,而实际上,它们都是Global对象的方法。而且Global对象的方法还不止这些。有关Global对象的具体方法和属性,感兴趣的同学可以看一下这里:JavaScript 全局对象参考手册
宿主对象
何为“宿主对象”?主要在这个“宿主”的概念上,前面我已经介绍了“火影”,介绍了“白”。而ECMAScript中的“宿主”当然就是我们网页的运行环境,即“操作系统”和“浏览器”。
所有非本地对象都是宿主对象(host object),即由 ECMAScript 实现的宿主环境提供的对象。
所有的BOM和DOM对象都是宿主对象。因为其对于不同的“宿主”环境所展示的内容不同。其实说白了就是,ECMAScript官方未定义的对象都属于宿主对象,因为其未定义的对象大多数是自己通过ECMAScript程序创建的对象。
var oPerson = new Object;
oPerson.name = 'simaopig';
oPerson.age = '26';
这里我自己定义的对象oPerson就是宿主对象。因为ECMAScript中未定义此对象,而此对象又只存在于我所运行的页面中。其貌似听起来是一个哲学命题。很奇怪我这款主题居然没有del的样式,残念。
看评论中,Andi的理解,这个oPerson的确应该叫user-defined object,用户自定义对象。嗯。。赞一个先。
总结
本地对象,就是那些官方定义好了的对象。内置对象是本地对象的一种,其只包含Global对象和Math对象。而宿主对象则是那些官方未定义,你自己构建的对象加上DOM和BOM对象组成的。 [/b][b]JavaScript 层级中的顶层对象,表示浏览器窗口。 包含客户端浏览器的信息。 包含客户端显示屏的信息。 包含了浏览器窗口访问过的 URL。 包含了当前 URL 的信息。 请点击下面的链接,学习更多有关对象及其集合、属性、方法和事件的知识。其中包含大量实例! [/b][b]ASP 对象 ASP 组件 相关参考
1、(面向对象和面向组件有什么不同?)
面向对象技术的基础是封装--接口与实现分离,面向对象的核心是多态--这是接口和实现分离的更高级升华,使得在运行时可以动态根据条件来选择隐藏在接口后面的实现,面向对象的表现形式是类和继承。面向对象的主要目标是使系统对象化,良好的对象化的结果,就是系统的各部分更加清晰化,耦合度大大降低。
面向组件技术建立在对象技术之上,它是对象技术的进一步发展,类这个概念仍然是组件技术中一个基础的概念,但是组件技术更核心的概念是接口。组件技术的主要目标是复用--粗粒度的复用,这不是类的复用,而是组件的复用,如一个dll、一个中间件,甚至一个框架。一个组件可以有一个类或多个类及其它元素(枚举、)组成,但是组件有个很明显的特征,就是它是一个独立的物理单元,经常以非源码的形式(如二进制,IL)存在。一个完整的组件中一般有一个主类,而其它的类和元素都是为了支持该主类的功能实现而存在的。为了支持这种物理独立性和粗粒度的复用,组件需要更高级的概念支撑,其中最基本的就是属性和事件,在对象的技术中曾一度困扰我们的类之间的相互依赖问题/消息传递问题,迄今为止我所知道最好的解决方案就是事件。要理解组件思想,首先要理解事件的思想和机制。
我一直坚持以为,一个组件的外形/外貌应该是简单的、应该是清晰的、没有冗余的东西、也没有无关紧要的东西,这个外貌通过接口来描述,接口中可以发布事件、属性和方法。这三种元素就足以描述一个组件外貌的所有特征。比如,我曾经用封装的一个完成端口组件,其外貌接口中只有四个方法,三个事件,三个属性而已,而该组件的内部实现却有几千行代码。所以在设计一个组件的时候,需要做很多的权衡,哪些需要通过接口暴露出来,哪些应当作为私有实现。有时,你会处于两难的境地,因为让组件更容易使用,所以需要给出很多默认的参数,但为了使该组件更通用,你又需要暴露更多的属性可以让人设定、暴露更多的方法和事件满足更复杂的功能。你需要抉择,你需要权衡。难怪有人会说,软件的设计更像是艺术,因为艺术的美在于恰当的抉择和平衡。我的经验是,在保持低耦合度的前提下,组件的接口足以对付当前的应用就好。如果日后需要加强功能,那就重构然后增强它,这是很容易的,因为早就说了嘛,保持组件的低耦合度。
需要说明一下的是,我们通常所说的控件(如按钮)也是一种组件,可以这么认为,控件是一种具有UI形式的组件。插件(Addin/Plugin)也是一种特殊的组件,插件的单独存在是没有意义的,它是由兼容该插件协议的框架所使用。
最后强调一点,组件的目标是粗粒度的复用,组件的核心是接口。
2、asp中组件与对象有什么区别
组件包含一个或几个类库,类库里面可以包含的很多类。 对象是一个类的一个实例。 例如 Set a = Server.CreatObject("ADODB.Connection") 意思是把类库ADODB里的Connection类创建一个实例。这个实例就是a,我们说a是一个Connection对象。 组件的作者编写了包含很多类的一个或几个类库,并把他们编译成dll,这就是组件,用户把这个dll注册到系统里,就可以在ASP中使用组件的类库里的东西。 ASP中系统预定义了一些对象,类似Server、Request、Response、Application、Session、Error。这些对象一开始就存在,不需要创建。 ?? ADO 是一项微软的技术
?? ADO 指 ActiveX 数据对象(ActiveX Data Objects)
?? ADO 是一个微软的 Active-X 组件
?? ADO 会随微软的 IIS 被自动安装
?? ADO 是一个访问数据库中数据的编程接口 从 ASP 文件内部访问数据库的通常途径是:
1. 创建至数据库的 ADO 连接(ADO connection)
2. 打开数据库连接
3. 创建 ADO 记录集(ADO recordset)
4. 打开记录集(recordset)
5. 从数据集中提取你所需要的数据
6. 关闭数据集
7. 关闭连接