- 浏览: 39126 次
- 性别:
- 来自: 杭州
最新评论
内容摘要:通过引入_initialized 属性,当第一次构造对象时生成方法showColor ,再次生成对象时,此时的_initialized 已经是true,就避免了重复生成函数,属性的定义和函数的定义都在构造函数内,也满足了语义上的对象封装概念。
1.Global对象。这对象之所以特别就是因为它根本不存在!-_-。如果你声明
var pointer=Global;
报错,找不到此对象。这是因为在ECMAScript中,每个函数都某个对象的方法,我们用到的isNaN(),isFinite(),parseInt()和parseFloat()函数,看起来是独立的函数,其实它们都是Global对象的函数。
需要注意两个用于处理url编码的函数:
1)encodeURI()和decodeURI() 处理完整的uri
2)encodeURIComponent()和decodeURIComponent() 处理片段
2.其他对象如Array,Math,Date对象,我发现比较有趣的是Array的处理方式与ruby中Array的处理方式几乎一样。
3.ECMAScript对象的创建方式:
1)工厂方式:
function showColor(){
alert(this.color)
}
function createCar(sColor, iDoors, iMpg) {
var oTempCar = new Object;
oTempCar.color = sColor;
oTempCar.doors = iDoors;
oTempCar.mpg = iMpg;
oTempCar.showColor =showColor;
return oTempCar;
}
var oCar1 = createCar("red", 4, 23);
var oCar2 = createCar("blue", 3, 25);
这样的方式看起来很奇怪,好象方法showColor()不是对象的方法
2)构造函数方式:
function Car(sColor, iDoors, iMpg) {
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.showColor = function () {
alert(this.color)
};
}
var oCar1 = new Car("red", 4, 23);
var oCar2 = new Car("blue", 3, 25);
这样的方式有个新问题,那就是每次构造一个对象都将重复生成函数showColor,为每个对象创建独立的函数版本。
3)原型方式
function Car() {
}
Car.prototype.color = "red";
Car.prototype.doors = 4;
Car.prototype.mpg = 23;
Car.prototype.drivers = new Array("Mike", "Sue");
Car.prototype.showColor = function () {
alert(this.color);
};
var oCar1 = new Car();
var oCar2 = new Car();
oCar1.drivers.push("Matt");
alert(oCar1.drivers); //outputs "Mike,Sue,Matt"
alert(oCar2.drivers); //outputs "Mike,Sue,Matt"
利用对象的prototype属性来构造对象,但是有两个问题:没办法使用构造函数传参来生成对象;函数虽然被不同对象共享,但是属性竟然也被共享,比如上面代码中,oCar1的drivers属性与oCar2的drivers属性是同一个Array对象。
4)为了解决上面问题,我们引入了构造函数/原型的混合方式:
function Car(sColor, iDoors, iMpg) {
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.drivers = new Array("Mike", "Sue");
}
Car.prototype.showColor = function () {
alert(this.color);
};
var oCar1 = new Car("red", 4, 23);
var oCar2 = new Car("blue", 3, 25);
oCar1.drivers.push("Matt");
alert(oCar1.drivers); //outputs "Mike,Sue,Matt"
alert(oCar2.drivers); //outputs "Mike,Sue"
属性通过构造函数方式,而函数则通过原型来生成,这就避免了纯粹原型方式带来的问题。但是函数放在对象的构造函数定义,让习惯java,c++的人也感觉不爽,对象为什么不能放在一块地方定义呢?这就引出来了动态原型方式
5)动态原型方式:
function Car(sColor, iDoors, iMpg) {
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.drivers = new Array("Mike", "Sue");
if (typeof Car._initialized == "undefined") {
Car.prototype.showColor = function () {
alert(this.color);
};
Car._initialized = true;
}
}
var oCar1 = new Car("red", 4, 23);
var oCar2 = new Car("blue", 3, 25);
通过引入_initialized 属性,当第一次构造对象时生成方法showColor ,再次生成对象时,此时的_initialized 已经是true,就避免了重复生成函数,属性的定义和函数的定义都在构造函数内,也满足了语义上的对象封装概念。
我们应当尽量采用 构造函数/原型混合方式 和 动态原型方式 来创建ECMAScript对象。
1.Global对象。这对象之所以特别就是因为它根本不存在!-_-。如果你声明
var pointer=Global;
报错,找不到此对象。这是因为在ECMAScript中,每个函数都某个对象的方法,我们用到的isNaN(),isFinite(),parseInt()和parseFloat()函数,看起来是独立的函数,其实它们都是Global对象的函数。
需要注意两个用于处理url编码的函数:
1)encodeURI()和decodeURI() 处理完整的uri
2)encodeURIComponent()和decodeURIComponent() 处理片段
2.其他对象如Array,Math,Date对象,我发现比较有趣的是Array的处理方式与ruby中Array的处理方式几乎一样。
3.ECMAScript对象的创建方式:
1)工厂方式:
function showColor(){
alert(this.color)
}
function createCar(sColor, iDoors, iMpg) {
var oTempCar = new Object;
oTempCar.color = sColor;
oTempCar.doors = iDoors;
oTempCar.mpg = iMpg;
oTempCar.showColor =showColor;
return oTempCar;
}
var oCar1 = createCar("red", 4, 23);
var oCar2 = createCar("blue", 3, 25);
这样的方式看起来很奇怪,好象方法showColor()不是对象的方法
2)构造函数方式:
function Car(sColor, iDoors, iMpg) {
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.showColor = function () {
alert(this.color)
};
}
var oCar1 = new Car("red", 4, 23);
var oCar2 = new Car("blue", 3, 25);
这样的方式有个新问题,那就是每次构造一个对象都将重复生成函数showColor,为每个对象创建独立的函数版本。
3)原型方式
function Car() {
}
Car.prototype.color = "red";
Car.prototype.doors = 4;
Car.prototype.mpg = 23;
Car.prototype.drivers = new Array("Mike", "Sue");
Car.prototype.showColor = function () {
alert(this.color);
};
var oCar1 = new Car();
var oCar2 = new Car();
oCar1.drivers.push("Matt");
alert(oCar1.drivers); //outputs "Mike,Sue,Matt"
alert(oCar2.drivers); //outputs "Mike,Sue,Matt"
利用对象的prototype属性来构造对象,但是有两个问题:没办法使用构造函数传参来生成对象;函数虽然被不同对象共享,但是属性竟然也被共享,比如上面代码中,oCar1的drivers属性与oCar2的drivers属性是同一个Array对象。
4)为了解决上面问题,我们引入了构造函数/原型的混合方式:
function Car(sColor, iDoors, iMpg) {
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.drivers = new Array("Mike", "Sue");
}
Car.prototype.showColor = function () {
alert(this.color);
};
var oCar1 = new Car("red", 4, 23);
var oCar2 = new Car("blue", 3, 25);
oCar1.drivers.push("Matt");
alert(oCar1.drivers); //outputs "Mike,Sue,Matt"
alert(oCar2.drivers); //outputs "Mike,Sue"
属性通过构造函数方式,而函数则通过原型来生成,这就避免了纯粹原型方式带来的问题。但是函数放在对象的构造函数定义,让习惯java,c++的人也感觉不爽,对象为什么不能放在一块地方定义呢?这就引出来了动态原型方式
5)动态原型方式:
function Car(sColor, iDoors, iMpg) {
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.drivers = new Array("Mike", "Sue");
if (typeof Car._initialized == "undefined") {
Car.prototype.showColor = function () {
alert(this.color);
};
Car._initialized = true;
}
}
var oCar1 = new Car("red", 4, 23);
var oCar2 = new Car("blue", 3, 25);
通过引入_initialized 属性,当第一次构造对象时生成方法showColor ,再次生成对象时,此时的_initialized 已经是true,就避免了重复生成函数,属性的定义和函数的定义都在构造函数内,也满足了语义上的对象封装概念。
我们应当尽量采用 构造函数/原型混合方式 和 动态原型方式 来创建ECMAScript对象。
发表评论
-
关于XHTML的H1标记的位置(转)
2010-05-21 00:02 675最近对H1的讨论很 ... -
h1~h6的使用原则(转)
2010-05-20 18:56 800在遵循网页标准制作网页的时候,为了使得设计更具有语义化,我们经 ... -
link和@import(转)
2010-05-19 13:47 752在XHTML加载CSS的几种方式,其中外部引用CSS分为两 ... -
JS获取浏览器窗口大小 获取屏幕,浏览器,网页高度宽度(转)
2010-05-11 12:57 3763网页可见区域宽:document.body.clientWid ... -
XMLHTTP.readyState的五种状态(转)
2010-04-18 10:01 2032对于很多 Web 开发人员来说,只需要生成简单的请求并接收简单 ... -
xmlhttp:open方法中的POST、GET参数的区别(转)
2010-04-18 08:43 26711 问题描述:xmlhttp:open ... -
Ajax问题:AJAX中文参数值乱码(转)
2010-04-18 08:41 895本文来解决本站发布的第一个解决的问题,那就是Ajax中文参数值 ... -
淘宝栅栏布局模块化命名浅析(转)
2010-03-30 08:56 760折腾,之前的数据几乎全部丢失掉了,学习、记笔记需要动力和时间的 ... -
Flash基本概念和原理
2010-03-22 16:57 1871一、时间轴线(Timeline) 时间轴线是动画和视频类软件 ... -
IE6中line-height属性失效问题(转)
2010-02-27 16:20 1064关于IE6下line-height属性失效问题 ... -
css奇怪的现象,ff不支持伪类的情况
2010-02-25 09:34 0.hcBox:first-child,*html .hcFCh ... -
认识浏览器的渲染引擎(转)
2010-02-23 14:57 1574浏览器的渲染引擎负责取得网页的内容(html、xml、图像等) ... -
正则表达式 转义字符(转)
2010-02-01 20:22 8945字符匹配语法: \d ... -
xhtml元素的分类
2010-02-01 12:35 691块元素:html,body,div,h1,h2,h3,h4,h ... -
css-IE6中的bug(转)
2010-01-28 15:09 787我们知道,IE6可能过不了多久就会消失了,但是我们还能继续支持 ... -
css-私有css Hack(转)
2010-01-28 14:49 616只针对ie6,ie7和firefox的csshack 注意都要 ... -
jQuery-控制表格列显示的插件
2010-01-28 14:28 835最近做项目,表格列比较多,常用的分辨率下总是有气人的横向滚 ...
相关推荐
其他语言可以实现ECMAScript来作为功能的基础,正如JavaScript那样。这个实现又可以被扩展,包含特定于宿主环境的新特性,比如QML就引入了Qt对象系统中的信号与槽,还增加了动态属性绑定等非常有特色的新功能。 在Qt...
–和Java一样,ECMAScript区分大小写,注释的格式相同,通过{}确定代码块,原始数据类型存储在堆栈,对象的引用存储在堆中 –ECMAScript是一种松散的语言,ECMAScript通过var操作符声明变量,并且不限类型,例如var...
Java Script由三个主要组成部分:ECMAScript(核心),BOM(浏览器对象模型),DOM(文档对象模型 注:ECMAScript描述了语法、类型、语句、关键字、保留字、运算符和对象。它就是定义了脚本语言的所有属性、方法和...
ECMAScript中Object是所有对象的基础。 理解:Object类型是所有它的实例的基础,换句话说,Object类型所具有的任何属性和方法也同样存在于更具体的对象中。 Object的实例都具有以下属性和方法 1.Constructor:保存着...
1.8 JavaScript的实现基础 1.8.1 ECMAScript 1.8.2 DOM 1.8.3 BOM 1.9 客户端与服务器端脚本 1.10 JavaScript与JScript、 VBScript 1.11 JavaScript与Java、Java applet 1.12 JavaScript的未来如何 1.13 本章小结 第...
第3章 对象基础 第4章 继承 第5章 浏览器中的JavaScript 第6章 DOM基础 第7章 正则表达式 第8章 检测浏览器和操作系统 第9章 事件 第10章 高级DOM技术 第11章 表单和数据完整性 第12章 表格排序 第13章 拖放 第14章 ...
“Everything is Object”,在面向对象的编程语言中谁都知道这句话,但对我来说这是一种感觉,只可意会很难言传。由于我对JavaScript和薄弱,所以在看Asp.net Ajax类库的同时也翻出了ECMAScript顺便学习学习。在...
ECMAScript(核心) DOM(文档对象模型) BOM(浏览器对象模型) 1.1ECMAScript ECMA-262定义的ECMAScrip与Web浏览器没有依赖关系,ECMA-262定义的只是这门语言的基础,提供核心语言功能 ECMAScript是通过ECMA...
今天,ECMAScript RegExp对象可以在调用exec方法时提供有关匹配项的信息。 此结果是一个Array其中包含有关匹配的子字符串的信息,以及指示input字符串的其他属性,找到匹配项的输入中的index以及包含任何已命名捕获...
工厂模式是软件工程领域一种广为人知的设计模式,而由于在ECMAScript中无法创建类,因此用函数封装以特定接口创建对象。其实现方法非常简单,也就是在函数内创建一个对象,给对象赋予属性及方法再将对象返回即可。...
QML实现并扩展了ECMAScript,是一种说明性语言,用来描述基于Qt对象系统的用户界面。QML提供了高可读性的、声明式的、类CSS的语法,支持结合动态属性绑定的ECMAScript表达式。 Qt Quick模块是开发QML应用的标准库,...
动态语言与动态类型语言 ECMAScript与JavaScript,JavaScript与BOM、DOM JavaScript基础语法 JavaScript对象机制、类与继承 JavaScript执行机制、作用域链和闭包 JavaScript编程建议
JavaScript零基础入门到精通视频教程 JavaScript零基础视频教程目录如下: 第01节 JavaScript面试中不可忽视的小问题\JavaScript视频课程-第01节 JavaScript面试中不可忽视的小问题 第02节 变量与常量\JavaScript...
1、js的简介JavaScript 是⼀种客户端脚本语⾔(脚本语⾔是⼀种轻量级的编程语⾔,语法和java类似。...(因为⾯向对象需要具有封装、继承、多态的特征)JavaScript语⾔中包含三个核⼼:ECMAScript基本语法、DOM、BOM....
JavaScript是一种基于对象和事件...Ecma国际以JavaScript为基础制定了ECMAScript标准。JavaScript也可以用于其他场合,如服务器端编程。完整的JavaScript实现包含三个部分:ECMAScript,文档对象模型,字节顺序记号。
JavaScript是一种基于对象和事件...Ecma国际以JavaScript为基础制定了ECMAScript标准。JavaScript也可以用于其他场合,如服务器端编程。完整的JavaScript实现包含三个部分:ECMAScript,文档对象模型,字节顺序记号。
1.3.1 ECMAScript 1.3.2 DOM 1.3.3 BOM 1.3.4 新的开始 1.4 Web标准 1.4.1 Web标准概述 1.4.2 结构.c表现和行为的分离 第2章ccJavaScript基础 2.1 JavaScript的语法 2.2 变量 2.3 ...
[1] Ecma国际以JavaScript为基础制定了ECMAScript标准。JavaScript也可以用于其他场合,如服务器端编程。完整的JavaScript实现包含三个部分:ECMAScript,文档对象模型,字节顺序记号。此文档可快速帮助初学者使用...
对应的标准也分三方面:结构化标准语言主要包括XHTML和XML,表现标准语言主要包括CSS,行为标准主要包括对象模型(如W3C DOM)、ECMAScript等。这些标准大部分由W3C起草和发布,也有一些是其他标准组织制订的标准,...
WebApi包括DOM和BOM部分。DOM部分包括元素操作、节点操作、DOM事件、事件对象及部分补充知识。BOM包括navigator、location、history、screen等部分。定时器、本地存储也有需要掌握的基础部分。