- 浏览: 39869 次
- 性别:
- 来自: 杭州
最新评论
内容摘要:通过引入_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 699最近对H1的讨论很 ... -
h1~h6的使用原则(转)
2010-05-20 18:56 824在遵循网页标准制作网页的时候,为了使得设计更具有语义化,我们经 ... -
link和@import(转)
2010-05-19 13:47 782在XHTML加载CSS的几种方式,其中外部引用CSS分为两 ... -
JS获取浏览器窗口大小 获取屏幕,浏览器,网页高度宽度(转)
2010-05-11 12:57 3778网页可见区域宽:document.body.clientWid ... -
XMLHTTP.readyState的五种状态(转)
2010-04-18 10:01 2065对于很多 Web 开发人员来说,只需要生成简单的请求并接收简单 ... -
xmlhttp:open方法中的POST、GET参数的区别(转)
2010-04-18 08:43 27081 问题描述:xmlhttp:open ... -
Ajax问题:AJAX中文参数值乱码(转)
2010-04-18 08:41 911本文来解决本站发布的第一个解决的问题,那就是Ajax中文参数值 ... -
淘宝栅栏布局模块化命名浅析(转)
2010-03-30 08:56 800折腾,之前的数据几乎全部丢失掉了,学习、记笔记需要动力和时间的 ... -
Flash基本概念和原理
2010-03-22 16:57 1919一、时间轴线(Timeline) 时间轴线是动画和视频类软件 ... -
IE6中line-height属性失效问题(转)
2010-02-27 16:20 1089关于IE6下line-height属性失效问题 ... -
css奇怪的现象,ff不支持伪类的情况
2010-02-25 09:34 0.hcBox:first-child,*html .hcFCh ... -
认识浏览器的渲染引擎(转)
2010-02-23 14:57 1592浏览器的渲染引擎负责取得网页的内容(html、xml、图像等) ... -
正则表达式 转义字符(转)
2010-02-01 20:22 8984字符匹配语法: \d ... -
xhtml元素的分类
2010-02-01 12:35 716块元素:html,body,div,h1,h2,h3,h4,h ... -
css-IE6中的bug(转)
2010-01-28 15:09 817我们知道,IE6可能过不了多久就会消失了,但是我们还能继续支持 ... -
css-私有css Hack(转)
2010-01-28 14:49 648只针对ie6,ie7和firefox的csshack 注意都要 ... -
jQuery-控制表格列显示的插件
2010-01-28 14:28 853最近做项目,表格列比较多,常用的分辨率下总是有气人的横向滚 ...
相关推荐
3. **动态性**:ECMAScript对象具有高度的动态性,意味着可以在运行时动态地添加、修改或删除属性。例如,可以像下面这样操作对象: ```javascript var foo = {x: 10}; foo.y = 20; foo.x = function () { ...
### ECMAscript基础知识点详解 #### 一、ECMAscript概述 ECMAscript,通常简称ES,是一种脚本语言的标准规范,由欧洲计算机制造商协会(ECMA International)制定,旨在提供一种标准的脚本语言语法和功能,用于...
### ECMAScript基础知识详解 #### 一、ECMAScript简介 ECMAScript 是 JavaScript 的核心规范,由欧洲计算机制造商协会(ECMA International)制定。它规定了浏览器等环境执行脚本语言的基础语法和数据类型等内容。...
本章将深入探讨JavaScript的ECMAScript语法基础,这是理解JavaScript编程的关键。ECMAScript,通常简称为ES,是JavaScript语言的标准,由ECMA国际制定并维护。 一、变量与数据类型 在JavaScript中,变量的声明使用`...
2009年发布的ECMAScript 5.1版本是JavaScript的一个关键里程碑,它在ECMAScript 3的基础上进行了诸多改进和扩展,为开发者提供了更强大、更稳定的编程环境。本说明将深入探讨ECMAScript 5.1的主要特性和关键知识点。...
ECMAScript 手册是关于ECMAScript语言的权威指南,该语言规范是JavaScript和JScript等编程语言的基础。ECMAScript由Brendan Eich在Netscape公司发明,并首次应用于Navigator 2.0浏览器,后来被所有Netscape和从...
通过学习ECMAScript的基础语法和特性,开发者可以更好地理解和应用QML。此外,ECMAScript的灵活性和强大的功能也为QML应用程序带来了无限的可能性。无论是对于初学者还是经验丰富的开发者来说,深入掌握ECMAScript都...
本实践实验室旨在为你提供使用ECMAScript对象模型的基础,以便程序化地自动化和与EWA web部件交互。具体来说,你将: 1. 探索Excel Services的ECMAScript对象模型 2. 开发调试技巧,用于诊断和解决开发问题 3. 学习...
ECMAScript是现代Web开发的基础之一,掌握了其核心概念如对象类型、基本包装类型、Global对象以及Math对象,能够帮助开发者更好地理解和运用JavaScript语言。在实际开发过程中,合理利用这些特性可以极大地提高代码...
ECMAScript 解读 ECMAScript 是一种脚本语言标准,由 Ecma ...掌握 ECMAScript 的基础知识是学习 JavaScript 高级程序设计的基础,理解 ECMAScript 可以帮助开发者更好地理解 JavaScript 语言,提高开发效率和质量。
为了更好地满足开发者的实际需求并提高编程效率,ECMAScript 第五版(简称 ES5)在原有的基础上进行了大幅度的更新与优化。ES5 不仅为开发者提供了更为丰富多样的 API 接口,还在语法层面实现了更加严谨的设计,引入...
ECMAScript 6(ES6),是JavaScript语言的下一代标准,于2015年6月正式发布。它由ECMA国际标准化组织制定,...通过学习和掌握ES6,开发者可以更高效地编写现代JavaScript代码,并为未来可能的ECMAScript标准奠定基础。
虽然ES2018并未完全实现尾调用优化,但它为未来的实现奠定了基础。尾调用优化可以防止递归调用导致的堆栈溢出,提高性能。 以上就是ECMAScript 2018的主要新特性。这些特性为JavaScript开发者提供了更强大的工具,...
ECMAScript是由ECMA国际标准化组织制定的标准化脚本语言规范,它定义了JavaScript这门语言的核心语法、类型、对象、原型、继承和内建对象等基础功能。然而,ECMAScript并不涉及HTML、CSS或者Web API等内容,这些属于...
ECMAScript 2016 作为第七版语言规范,在原有基础上增加了新的特性,如 `Array.prototype.includes()`、指数操作符、`Object.values()` 和 `Object.entries()` 等,这些改进不仅提升了语言的功能性,也为开发者带来...
随后的两年,又分别发布了2.0和3.0版本,其中ECMAScript 3.0版是一个重要的里程碑,它奠定了JavaScript语言的基础,并被后续版本完全继承。在此之后,ES4.0开始酝酿,尽管最终未能通过,但它的一些特性被后续的ES6...
ECMAScript基础部分会介绍JavaScript的基本语法,包括变量声明(var、let、const)、数据类型(如字符串、数字、布尔值、null、undefined、对象、数组和符号)、以及如何在代码中进行注释。 2. **值与类型**: 这...
4. 数据模型:标准定义了ECMAScript中的数据模型,包括对象的定义、数据类型(如Undefined、Null、Booleans、Numbers、Strings、Namespaces等)、类和简单实例、未实例化的函数、方法闭包、日期、正则表达式以及包和...
对于已经掌握基础JavaScript的开发者来说,理解并掌握ES6的新特性至关重要。** 1. **类与继承:** ES6 引入了类的概念,虽然本质上仍然是基于原型的继承,但它提供了更简洁的面向对象编程语法。`class`关键字用于...