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对象。
分享到:
相关推荐
3. **动态性**:ECMAScript对象具有高度的动态性,意味着可以在运行时动态地添加、修改或删除属性。例如,可以像下面这样操作对象: ```javascript var foo = {x: 10}; foo.y = 20; foo.x = function () { ...
### ECMAscript基础知识点详解 #### 一、ECMAscript概述 ECMAscript,通常简称ES,是一种脚本语言的标准规范,由欧洲计算机制造商协会(ECMA International)制定,旨在提供一种标准的脚本语言语法和功能,用于...
本章将深入探讨JavaScript的ECMAScript语法基础,这是理解JavaScript编程的关键。ECMAScript,通常简称为ES,是JavaScript语言的标准,由ECMA国际制定并维护。 一、变量与数据类型 在JavaScript中,变量的声明使用`...
### ECMAScript基础知识详解 #### 一、ECMAScript简介 ECMAScript 是 JavaScript 的核心规范,由欧洲计算机制造商协会(ECMA International)制定。它规定了浏览器等环境执行脚本语言的基础语法和数据类型等内容。...
2009年发布的ECMAScript 5.1版本是JavaScript的一个关键里程碑,它在ECMAScript 3的基础上进行了诸多改进和扩展,为开发者提供了更强大、更稳定的编程环境。本说明将深入探讨ECMAScript 5.1的主要特性和关键知识点。...
本实践实验室旨在为你提供使用ECMAScript对象模型的基础,以便程序化地自动化和与EWA web部件交互。具体来说,你将: 1. 探索Excel Services的ECMAScript对象模型 2. 开发调试技巧,用于诊断和解决开发问题 3. 学习...
通过学习ECMAScript的基础语法和特性,开发者可以更好地理解和应用QML。此外,ECMAScript的灵活性和强大的功能也为QML应用程序带来了无限的可能性。无论是对于初学者还是经验丰富的开发者来说,深入掌握ECMAScript都...
ECMAScript 手册是关于ECMAScript语言的权威指南,该语言规范是JavaScript和JScript等编程语言的基础。ECMAScript由Brendan Eich在Netscape公司发明,并首次应用于Navigator 2.0浏览器,后来被所有Netscape和从...
ECMAScript 解读 ECMAScript 是一种脚本语言标准,由 Ecma ...掌握 ECMAScript 的基础知识是学习 JavaScript 高级程序设计的基础,理解 ECMAScript 可以帮助开发者更好地理解 JavaScript 语言,提高开发效率和质量。
ECMAScript 6(ES6),是JavaScript语言的下一代标准,于2015年6月正式发布。它由ECMA国际标准化组织制定,...通过学习和掌握ES6,开发者可以更高效地编写现代JavaScript代码,并为未来可能的ECMAScript标准奠定基础。
ECMAScript是由ECMA国际标准化组织制定的标准化脚本语言规范,它定义了JavaScript这门语言的核心语法、类型、对象、原型、继承和内建对象等基础功能。然而,ECMAScript并不涉及HTML、CSS或者Web API等内容,这些属于...
为了更好地满足开发者的实际需求并提高编程效率,ECMAScript 第五版(简称 ES5)在原有的基础上进行了大幅度的更新与优化。ES5 不仅为开发者提供了更为丰富多样的 API 接口,还在语法层面实现了更加严谨的设计,引入...
虽然ES2018并未完全实现尾调用优化,但它为未来的实现奠定了基础。尾调用优化可以防止递归调用导致的堆栈溢出,提高性能。 以上就是ECMAScript 2018的主要新特性。这些特性为JavaScript开发者提供了更强大的工具,...
ECMAScript 2016 作为第七版语言规范,在原有基础上增加了新的特性,如 `Array.prototype.includes()`、指数操作符、`Object.values()` 和 `Object.entries()` 等,这些改进不仅提升了语言的功能性,也为开发者带来...
ECMAScript是现代Web开发的基础之一,掌握了其核心概念如对象类型、基本包装类型、Global对象以及Math对象,能够帮助开发者更好地理解和运用JavaScript语言。在实际开发过程中,合理利用这些特性可以极大地提高代码...
随后的两年,又分别发布了2.0和3.0版本,其中ECMAScript 3.0版是一个重要的里程碑,它奠定了JavaScript语言的基础,并被后续版本完全继承。在此之后,ES4.0开始酝酿,尽管最终未能通过,但它的一些特性被后续的ES6...
对于已经掌握基础JavaScript的开发者来说,理解并掌握ES6的新特性至关重要。** 1. **类与继承:** ES6 引入了类的概念,虽然本质上仍然是基于原型的继承,但它提供了更简洁的面向对象编程语法。`class`关键字用于...
4. 数据模型:标准定义了ECMAScript中的数据模型,包括对象的定义、数据类型(如Undefined、Null、Booleans、Numbers、Strings、Namespaces等)、类和简单实例、未实例化的函数、方法闭包、日期、正则表达式以及包和...
ECMAScript基础部分会介绍JavaScript的基本语法,包括变量声明(var、let、const)、数据类型(如字符串、数字、布尔值、null、undefined、对象、数组和符号)、以及如何在代码中进行注释。 2. **值与类型**: 这...