`
langlanglanglang
  • 浏览: 31677 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

java script 面向对象--javascript如何定义类和对象

 
阅读更多

javascript如何定义类和对象

1、原始方式

 

var oCar = new Object; 
oCar.color = "blue"; 
oCar.doors = 4;
oCar.mpg = 25;
oCar.showColor = function() { 
   alert(this.color); 
};

 

 

2、工厂方法

 

function createCar(sColor,iDoors,iMpg) {
  var oTempCar = new Object;
  oTempCar.color = sColor;
  oTempCar.doors = iDoors;
  oTempCar.mpg = iMpg;
  oTempCar.showColor = function() {
    alert(this.color);
  };
  return oTempCar;
}

var oCar1 = createCar("red",4,23);
var oCar2 = createCar("blue",3,25);

oCar1.showColor();		//输出 "red"
oCar2.showColor();		//输出 "blue"

 缺点是:1、每次都创建一个object类型的对象,不能使用instanceof

               2、每次创建对象的时候,方法也会被创建一次,方法不能被同一个类的对象共享。

 

在工厂方法外构建方法

 

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);

oCar1.showColor();		//输出 "red"
oCar2.showColor();		//输出 "blue"

 但是从语义上来讲这个方法showColor不太像对象的属性。

 

3、构造函数方式

 

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);

优点:跟工厂方式不同的是,每次创建同一个类的对象时,不是创建一个object的对象,使用this。同时,可以使用instance of。

缺点:和工厂方式一样,不能再构造函数内定义共享的函数。

 

4、原型对象

function Car() {
}

Car.prototype.color = "blue";
Car.prototype.doors = 4;
Car.prototype.mpg = 25;
Car.prototype.drivers = new Array("Mike","John");
Car.prototype.showColor = function() {
  alert(this.color);
};

var oCar1 = new Car();
var oCar2 = new Car();

oCar1.drivers.push("Bill");

alert(oCar1.drivers);	//输出 "Mike,John,Bill"
alert(oCar2.drivers);	//输出 "Mike,John,Bill"

 

使用原型方式的缺点是同一类的所有对象将共享同一原型对象,原型对象的所有属性都将被共享,且属性定义只能在原型定义之后。

优点:1、同一类创建的对象将共享类的方法。

缺点:1、从这个类new出来的对象共享类的所有属性。如加粗的部分,数组引用被共享,在ocar1中改变array,ocar2也会相应改变。

           2、构造函数不能有参数

4、混合模式

function Car(sColor,iDoors,iMpg) {
  this.color = sColor;
  this.doors = iDoors;
  this.mpg = iMpg;
  this.drivers = new Array("Mike","John");
}

Car.prototype.showColor = function() {
  alert(this.color);
};

var oCar1 = new Car("red",4,23);
var oCar2 = new Car("blue",3,25);

oCar1.drivers.push("Bill");

alert(oCar1.drivers);	//输出 "Mike,John,Bill"
alert(oCar2.drivers);	//输出 "Mike,John"

 优点:1、解决了上述的不能同时拥有专属的属性和方法和共享属性和方法的问题,通过构造函数来实现instance的专属属性和方法,通过原型实现属性和方法的共享。

            2、可以使用instanceof

 缺点:1、封装还不够好 没有用

动态原型方法

function Car(sColor,iDoors,iMpg) {
  this.color = sColor;
  this.doors = iDoors;
  this.mpg = iMpg;
  this.drivers = new Array("Mike","John");
  
  if (typeof Car._initialized == "undefined") {
    Car.prototype.showColor = function() {
      alert(this.color);
    };
	
    Car._initialized = true;
  }
}

 完美解决上述问题

分享到:
评论

相关推荐

    JavaScript面向对象编程

    JavaScript面向对象编程 在JavaScript对象笔记中,记录的都是内置对象的使用,而本文的目的是学习如何创建自己的对象,如何在JS中进行面向对象编程,并且以这些为指导编写实用的工具。

    java/java script资源合集完整版

    Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称。 由James Gosling和同事们共同研发,并在1995年正式推出。JavaScript 是世界上最流行的编程语言。 这门语言可用于 HTML ...

    javascript 面向对象编程 万物皆对象

    javascript和java、C#等语言一样也具有面向对象的一些特征,但细比较的时候,会发现这些特征并不是真正的面向对象,很多地方都是利用对象本身来模拟面向对象,所以认为javascript不能算是面向对象编程语言,而是基于...

    探讨javascript是不是面向对象的语言

    2 一些评价说javascript不是真正面向对象的因为它不能提供信息的隐藏。也就是,对象不能有私有变量和私有方法:所有的成员都是公共的。但随后有人证明了javaScript对象可以拥有私有变量和私有方法。另外还有批评说...

    DWR开发包常规客户端服务器端面向对象编程

    dwr开发包,常规客户端服务器端面向对象编程。 基于Spring,在服务器端配置: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" ...

    JavaScript对象笔记.rar

    上面只是一个简单的不能再简单的介绍,面向对象编程比这个要复杂多了。不过我觉得对对象的理解需要在不断的实践中一点点地加深。心急的话可以去看看百度百科对面向对象的解释。 在后面的JavaScript对象笔记中,记录...

    java script听课笔记

    Javascript 输入网址 JS文件客户端保存 浏览器引擎执行Js 通过交互响应返回 Firefox插件->Filebug ->fetwork ECMAscript核心、DOM文档对象模型、BOM浏览器对象类型 ECMaScript Javascript是面向对象

    JavaScript面向对象编程指南

    JavaScript是一种具有高度表达能力的、基于原型特性的、非常灵活的面向对象编程语言。本书着重介绍JavaScript在面向对象方面的特性,展示如何构建强健的、可维护的、功能强大的应用程序及程序库。此书提供了较为全面...

    javascript 面向对象的JavaScript类

    在上一节面 JavaScript 面向对象之命名空间 中说了怎么定义JavaScript命名空间,这一节来说下紧接着的一个概念——类。虽然JavaScript中没有class关键字,但作为开发人员我们一定要有这个思想。在C#中类可以分为...

    javascript 的面向对象特性参考

    总的感受, javascript作为一种弱类型的动态语言,语法解决于java,但其面向对象的方式更和python相识。 1 面向对象的特性 类,成员变量,成员函数,类变量,类方法,继承,多态 1) 类 类的定义:function ...

    javascript面向对象之Javascript 继承

    上几节讲了 JavaScript 面向对象之命名空间 、 javascript 面向对象的JavaScript类 、 JavaScript 面向对象的之私有成员和公开成员 与 Javascript 面向对象之重载,大家可以先看上面的再继续往下看。在JavaScript...

    javascript面向对象之定义成员方法实例分析

    本文实例分析了javascript面向对象之定义成员方法。分享给大家供大家参考。具体如下: javascript面向对象,定义成员方法如下所示: 代码如下:[removed] function Person(name,age){  this.name = name;  this....

    《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析

    本文实例讲述了Javascript面向对象程序设计对象成员的定义。分享给大家供大家参考,具体如下: 序: 刚接触javascript的时候,觉得这语言有点儿摸不着门道,感觉这玩意儿太难学了,没什么规范,没什么像样的手册,...

    JAVA上百实例源码以及开源项目源代码

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    JavaScript基础和实例代码

    4.5.1 通过定义对象的构造函数的方法 4.5.2 通过对象直接初始化的方法 4.5.3 修改、删除对象实例的属性 4.5.4 通过原型为对象添加新属性和新方法 4.5.5 自定义对象的嵌套 4.5.6 内存的分配和释放 4.6 本章小结 第5章...

    再谈javascript面向对象编程

    这种不适来自于Javascript的语法的简练和不严谨,这种不适也来自Javascript这个悲催的名称,我在想网景公司的Javascript设计者在给他起名称那天一定是脑壳进水了,让Javascript这么多年来受了这么多不白之冤,人们都...

    java开源包10

    JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...

    javascript面向对象三大特征之多态实例详解

    本文实例讲述了javascript面向对象三大特征之多态。分享给大家供大家参考,具体如下: 多态 从某种意义上来说,多态是面向对象中重要的一部分,也是实施继承的主要目的。 一个实例可以拥有多个类型,它既可以是这种...

    javascript面向对象三大特征之封装实例详解

    本文实例讲述了javascript面向对象三大特征之封装。分享给大家供大家参考,具体如下:封装封装(Encapsulation):就是把对象内部数据和操作细节进行隐藏。很多面向对象语言都支持封装特性,提供关键字如private来隐藏...

    学习javascript面向对象 javascript实现继承的方式

    本文实例为大家介绍了javascript实现继承的6种方式,分享给大家供大家参考,具体内容如下 1、【原型链继承】实现的本质是重写原型对象,代之以一个新类型的实例。实际上不是SubType的原型的constructor属性被重写了...

Global site tag (gtag.js) - Google Analytics