`
icybamboo
  • 浏览: 39126 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ECMAScript对象基础(转)

阅读更多
内容摘要:通过引入_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对象。
分享到:
评论

相关推荐

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

    其他语言可以实现ECMAScript来作为功能的基础,正如JavaScript那样。这个实现又可以被扩展,包含特定于宿主环境的新特性,比如QML就引入了Qt对象系统中的信号与槽,还增加了动态属性绑定等非常有特色的新功能。 在Qt...

    ECMAScript 基础知识

    –和Java一样,ECMAScript区分大小写,注释的格式相同,通过{}确定代码块,原始数据类型存储在堆栈,对象的引用存储在堆中 –ECMAScript是一种松散的语言,ECMAScript通过var操作符声明变量,并且不限类型,例如var...

    JavaScript基础&BOM,学习Java第42天

    Java Script由三个主要组成部分:ECMAScript(核心),BOM(浏览器对象模型),DOM(文档对象模型 注:ECMAScript描述了语法、类型、语句、关键字、保留字、运算符和对象。它就是定义了脚本语言的所有属性、方法和...

    浅析JavaScript中的对象类型Object

    ECMAScript中Object是所有对象的基础。 理解:Object类型是所有它的实例的基础,换句话说,Object类型所具有的任何属性和方法也同样存在于更具体的对象中。 Object的实例都具有以下属性和方法 1.Constructor:保存着...

    JavaScript基础和实例代码

    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 本章小结 第...

    Java Script高级程序设计

    第3章 对象基础 第4章 继承 第5章 浏览器中的JavaScript 第6章 DOM基础 第7章 正则表达式 第8章 检测浏览器和操作系统 第9章 事件 第10章 高级DOM技术 第11章 表单和数据完整性 第12章 表格排序 第13章 拖放 第14章 ...

    [ASP.NET Ajax] ECMAScript基础类以及Asp.net Ajax对类lt;Objectgt;的扩展

    “Everything is Object”,在面向对象的编程语言中谁都知道这句话,但对我来说这是一种感觉,只可意会很难言传。由于我对JavaScript和薄弱,所以在看Asp.net Ajax类库的同时也翻出了ECMAScript顺便学习学习。在...

    JavaScript学习心得之概述

    ECMAScript(核心) DOM(文档对象模型) BOM(浏览器对象模型) 1.1ECMAScript  ECMA-262定义的ECMAScrip与Web浏览器没有依赖关系,ECMA-262定义的只是这门语言的基础,提供核心语言功能  ECMAScript是通过ECMA...

    proposal-regexp-match-indices:ECMAScript RegExp匹配指数

    今天,ECMAScript RegExp对象可以在调用exec方法时提供有关匹配项的信息。 此结果是一个Array其中包含有关匹配的子字符串的信息,以及指示input字符串的其他属性,找到匹配项的输入中的index以及包含任何已命名捕获...

    JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)

     工厂模式是软件工程领域一种广为人知的设计模式,而由于在ECMAScript中无法创建类,因此用函数封装以特定接口创建对象。其实现方法非常简单,也就是在函数内创建一个对象,给对象赋予属性及方法再将对象返回即可。...

    Qt-Quick核心编程之QML语言基础,适合Qt的初学者

    QML实现并扩展了ECMAScript,是一种说明性语言,用来描述基于Qt对象系统的用户界面。QML提供了高可读性的、声明式的、类CSS的语法,支持结合动态属性绑定的ECMAScript表达式。 Qt Quick模块是开发QML应用的标准库,...

    JavaScript基础培训(公司内部干货)

    动态语言与动态类型语言 ECMAScript与JavaScript,JavaScript与BOM、DOM JavaScript基础语法 JavaScript对象机制、类与继承 JavaScript执行机制、作用域链和闭包 JavaScript编程建议

    JavaScript零基础入门到精通视频教程

    JavaScript零基础入门到精通视频教程 JavaScript零基础视频教程目录如下: 第01节 JavaScript面试中不可忽视的小问题\JavaScript视频课程-第01节 JavaScript面试中不可忽视的小问题 第02节 变量与常量\JavaScript...

    js基础知识js的简介

    1、js的简介JavaScript 是⼀种客户端脚本语⾔(脚本语⾔是⼀种轻量级的编程语⾔,语法和java类似。...(因为⾯向对象需要具有封装、继承、多态的特征)JavaScript语⾔中包含三个核⼼:ECMAScript基本语法、DOM、BOM....

    JavaScript教程--从入门到精通

    JavaScript是一种基于对象和事件...Ecma国际以JavaScript为基础制定了ECMAScript标准。JavaScript也可以用于其他场合,如服务器端编程。完整的JavaScript实现包含三个部分:ECMAScript,文档对象模型,字节顺序记号。

    JavaScript教程

    JavaScript是一种基于对象和事件...Ecma国际以JavaScript为基础制定了ECMAScript标准。JavaScript也可以用于其他场合,如服务器端编程。完整的JavaScript实现包含三个部分:ECMAScript,文档对象模型,字节顺序记号。

    《精通Javascript+jQuery》光盘源码

     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 ...

    js入门文档

    [1] Ecma国际以JavaScript为基础制定了ECMAScript标准。JavaScript也可以用于其他场合,如服务器端编程。完整的JavaScript实现包含三个部分:ECMAScript,文档对象模型,字节顺序记号。此文档可快速帮助初学者使用...

    web2.0标准基础培训文档

    对应的标准也分三方面:结构化标准语言主要包括XHTML和XML,表现标准语言主要包括CSS,行为标准主要包括对象模型(如W3C DOM)、ECMAScript等。这些标准大部分由W3C起草和发布,也有一些是其他标准组织制订的标准,...

    【WebApi思想导图】Javascript分为ECMAScript和WebApi,此为WebApi部分

    WebApi包括DOM和BOM部分。DOM部分包括元素操作、节点操作、DOM事件、事件对象及部分补充知识。BOM包括navigator、location、history、screen等部分。定时器、本地存储也有需要掌握的基础部分。

Global site tag (gtag.js) - Google Analytics