`

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"423);
var oCar2 = createCar("blue"325);

这样的方式看起来很奇怪,好象方法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"423);
var oCar2 = new Car("blue"325);


这样的方式有个新问题,那就是每次构造一个对象都将重复生成函数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"423);
var oCar2 = new Car("blue"325);

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"423);
var oCar2 = new Car("blue"325);

通过引入_initialized 属性,当第一次构造对象时生成方法showColor ,再次生成对象时,此时的_initialized 已经是true,就避免了重复生成函数,属性的定义和函数的定义都在构造函数内,也满足了语义上的对象封装概念。

我们应当尽量采用 构造函数/原型混合方式 动态原型方式 来创建ECMAScript对象。
分享到:
评论

相关推荐

    EcmaScript面向对象1

    3. **动态性**:ECMAScript对象具有高度的动态性,意味着可以在运行时动态地添加、修改或删除属性。例如,可以像下面这样操作对象: ```javascript var foo = {x: 10}; foo.y = 20; foo.x = function () { ...

    ECMAscript

    ### ECMAscript基础知识点详解 #### 一、ECMAscript概述 ECMAscript,通常简称ES,是一种脚本语言的标准规范,由欧洲计算机制造商协会(ECMA International)制定,旨在提供一种标准的脚本语言语法和功能,用于...

    【第九章】JavaScript【ECMAScript语法基础】

    本章将深入探讨JavaScript的ECMAScript语法基础,这是理解JavaScript编程的关键。ECMAScript,通常简称为ES,是JavaScript语言的标准,由ECMA国际制定并维护。 一、变量与数据类型 在JavaScript中,变量的声明使用`...

    ECMAScript 基础知识

    ### ECMAScript基础知识详解 #### 一、ECMAScript简介 ECMAScript 是 JavaScript 的核心规范,由欧洲计算机制造商协会(ECMA International)制定。它规定了浏览器等环境执行脚本语言的基础语法和数据类型等内容。...

    ECMAScript5.1中文版说明

    2009年发布的ECMAScript 5.1版本是JavaScript的一个关键里程碑,它在ECMAScript 3的基础上进行了诸多改进和扩展,为开发者提供了更强大、更稳定的编程环境。本说明将深入探讨ECMAScript 5.1的主要特性和关键知识点。...

    Using the Excel Services ECMAScript Object Model.docx

    本实践实验室旨在为你提供使用ECMAScript对象模型的基础,以便程序化地自动化和与EWA web部件交互。具体来说,你将: 1. 探索Excel Services的ECMAScript对象模型 2. 开发调试技巧,用于诊断和解决开发问题 3. 学习...

    Qt-Quick核心编程之ECMAScript初探,适合Qt初学者

    通过学习ECMAScript的基础语法和特性,开发者可以更好地理解和应用QML。此外,ECMAScript的灵活性和强大的功能也为QML应用程序带来了无限的可能性。无论是对于初学者还是经验丰富的开发者来说,深入掌握ECMAScript都...

    ecmascript手册

    ECMAScript 手册是关于ECMAScript语言的权威指南,该语言规范是JavaScript和JScript等编程语言的基础。ECMAScript由Brendan Eich在Netscape公司发明,并首次应用于Navigator 2.0浏览器,后来被所有Netscape和从...

    ECMAScript解读.doc

    ECMAScript 解读 ECMAScript 是一种脚本语言标准,由 Ecma ...掌握 ECMAScript 的基础知识是学习 JavaScript 高级程序设计的基础,理解 ECMAScript 可以帮助开发者更好地理解 JavaScript 语言,提高开发效率和质量。

    ecmascript 6 入门.pdf

    ECMAScript 6(ES6),是JavaScript语言的下一代标准,于2015年6月正式发布。它由ECMA国际标准化组织制定,...通过学习和掌握ES6,开发者可以更高效地编写现代JavaScript代码,并为未来可能的ECMAScript标准奠定基础。

    ECMASCRIPT 6介绍

    ECMAScript是由ECMA国际标准化组织制定的标准化脚本语言规范,它定义了JavaScript这门语言的核心语法、类型、对象、原型、继承和内建对象等基础功能。然而,ECMAScript并不涉及HTML、CSS或者Web API等内容,这些属于...

    ECMAScript-Edition5-小试

    为了更好地满足开发者的实际需求并提高编程效率,ECMAScript 第五版(简称 ES5)在原有的基础上进行了大幅度的更新与优化。ES5 不仅为开发者提供了更为丰富多样的 API 接口,还在语法层面实现了更加严谨的设计,引入...

    ECMAScript 2018快速入门

    虽然ES2018并未完全实现尾调用优化,但它为未来的实现奠定了基础。尾调用优化可以防止递归调用导致的堆栈溢出,提高性能。 以上就是ECMAScript 2018的主要新特性。这些特性为JavaScript开发者提供了更强大的工具,...

    ECMAScript® 2016 7th Language Specification.pdf

    ECMAScript 2016 作为第七版语言规范,在原有基础上增加了新的特性,如 `Array.prototype.includes()`、指数操作符、`Object.values()` 和 `Object.entries()` 等,这些改进不仅提升了语言的功能性,也为开发者带来...

    ECMAScript

    ECMAScript是现代Web开发的基础之一,掌握了其核心概念如对象类型、基本包装类型、Global对象以及Math对象,能够帮助开发者更好地理解和运用JavaScript语言。在实际开发过程中,合理利用这些特性可以极大地提高代码...

    ECMAScript 6入门.pdf

    随后的两年,又分别发布了2.0和3.0版本,其中ECMAScript 3.0版是一个重要的里程碑,它奠定了JavaScript语言的基础,并被后续版本完全继承。在此之后,ES4.0开始酝酿,尽管最终未能通过,但它的一些特性被后续的ES6...

    深度解析 ECMAScript 6

    对于已经掌握基础JavaScript的开发者来说,理解并掌握ES6的新特性至关重要。** 1. **类与继承:** ES6 引入了类的概念,虽然本质上仍然是基于原型的继承,但它提供了更简洁的面向对象编程语法。`class`关键字用于...

    ECMAScript Edition 4 Draft

    4. 数据模型:标准定义了ECMAScript中的数据模型,包括对象的定义、数据类型(如Undefined、Null、Booleans、Numbers、Strings、Namespaces等)、类和简单实例、未实例化的函数、方法闭包、日期、正则表达式以及包和...

    ECMAScript从零开始学-课件

    ECMAScript基础部分会介绍JavaScript的基本语法,包括变量声明(var、let、const)、数据类型(如字符串、数字、布尔值、null、undefined、对象、数组和符号)、以及如何在代码中进行注释。 2. **值与类型**: 这...

Global site tag (gtag.js) - Google Analytics