首页 > 语言 > JavaScript > 正文

JavaScript面向对象程序设计中对象的定义和继承详解

2024-05-06 15:36:27
字体:
来源:转载
供稿:网友

本文实例讲述了JavaScript面向对象程序设计中对象的定义和继承。分享给大家供大家参考,具体如下:

在面向对象的Javascript编程中,希望代码优雅有高效是非常重要的。javascript中不存在类的概念,只有对象。要想把Javascript代码写的像java 或者C++一样优雅,就得考虑如何去实现,同时也要考虑性能和高效。定义javascript对象的方式有很多,继承的方式也很多。通过不断地实践,推荐如下的方法:

1.Javascript对象的定义采用混合方式【构造函数 +原型方式(prototype)】

(1)通过构造函数方式定义对象的所有非函数属性

(2)用原型方式定义对象的函数属性

采用这种方式,所有的属性都是单一对象私有的,而方法则是所有对象公有的,对象之间的属性不相互干扰,各个对象间共享同一个方法。

//使用原型+构造函数方式来定义对象//构造函数定义对象的非函数属性<strong>function Person(){    this.username = new Array();    this.password = "123";}//通过原型方式定义对象的函数Person.prototype.getInfo = function(){    alert(this.username+","+this.password);};var p = new Person();var p2 = new Person();p.username.push("zhangsan");p2.username.push("lisi");p.getInfo();p2.getInfo();

在现实的开发过程中,我们可能希望开发的各个类(实质是对象)能像java程序中放到一个包中统一管理,统一使用,而各个对象相互独立,同时避免对象重名等等因素,我们需要给每个类有个作用域,此时我们采用将对象放到自定匿名函数的方式来解决,这一点和jQuery开发插件的有点类似。代码如下:

/** * @author jasson * @include common.js *///对象存在就等于对象,对象不存在就创建{}var JassonChart = JassonChart || {};(function(){  //构造函数定义对象的非函数属性  function Person()  {    this.username = new Array();    this.password = "123";  }  //通过原型方式定义对象的函数  Person.prototype.getInfo = function()  {      alert(this.username+","+this.password);  };  //将该类放到JassonChart中,类似java中的包,或者C++中的  JassonChart.Person= Person;}());//调用该类库中的Person类var p = new JassonChart.Person();

这样我们可以定义多个类,每个类都采用如上的方式实现,这样各个类相互都有作用域,非常规范。对于我们要用到的一些工具类,我们可以采用简单的对象进行定义,代码如下

/*** @author jasson*/var JassonChart = JassonChart || {};JassonChart .util = {constants : {WIDTH : 'width',HEIGHT : 'height',SVG : 'SVG',CANVAS : 'CANVAS',G : 'G', //svg elementSTRING : 'string'},distance : function(a, b) {var dx = a.x - b.x;var dy = a.y - b.y;return Math.sqrt(dx * dx + dy * dy);}};            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选