如何编写可维护的面向对象JavaScript代码

发表于:2012-4-27 09:35

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Yao Xiao    来源:51Testing软件测试网采编

  能够写出可维护的面向对象JavaScript代码不仅可以节约金钱,还能让你很受欢迎。不信?有可能你自己或者其他什么人有一天会回来重用你的代码。如果能尽量让这个经历不那么痛苦,就可以节省不少时间。地球人都知道,时间就是金钱。同样的,你也会因为帮某人省去了头疼的过程而获得他的偏爱。但是,在开始探索如何编写可维护的面向对象JavaScript代码之前,我们先来快速看看什么是面向对象。如果已经了解面向对象的概念了,就可以直接跳过下一节。

  什么是面向对象?

  面向对象编程主要通过代码代表现实世界中的实质对象。要创建对象,首先需要写一个“类”来定义。 类几乎可以代表所有的东西:账户,员工,导航菜单,汽车,植物,广告,饮料,等等。而每次要创建对象的时候,就从类实例化一个对象。换句话说,就是创建类的实例做为对象。事实上,通常处理一个以上的同类事物时就会使用到对象。另外,只需要简单的函数式程序就可以做的很好。对象实质上是数据的容器。因此在一个employee对象中,你可能要储存员工号,姓名,入职日期,职称,工资,资历,等等。对象也包括处理数据的函数(也叫做“方法”)。方法被用作媒介来确保数据的完整性,以及在储存之前对数据进行转换。例如,方法可以接收任意格式的日期然后在储存之前将其转化成标准化格式。最后,类还可以继承其他的类。继承可以让你在不同类中重复使用相同代码。例如,银行账户和音像店账户都可以继承一个基本的账户类,里面包括个人信息,开户日期,分部信息,等等。然后每个都可以定义自己的交易或者借款处理等数据结构和方法。

  警告:JavaScript面向对象是不一样的

  在上一节中,概述了经典的面向对象编程的基本知识。说经典是因为JavaScript并不遵循这些规则。相反地,JavaScript的类是写成函数的样子,而继承则是通过原型实现的。原型继承基本上意味着使用原型属性来实现对象的继承,而不是从类继承类。

  ———————————————–

  【2012-4-25 11:11:35 更新】:根据微博网友@高翌翔 的反馈,前文中有关“JS 面向对象”的内容不够细。现推荐《Javascript 面向对象编程》《再谈javascript面向对象编程》两篇文章

  ———————————————–

  对象的实例化

  以下是JavaScript中对象实例化的例子:

// 定义Employee类
   functionEmployee(num, fname, lname) {
      this.getFullName =function() {
       returnfname +" "+ lname;
       }
   };
  
  // 实例化Employee对象
  varjohn =newEmployee("4815162342","John","Doe");
   alert("The employee's full name is "+ john.getFullName());

  在这里,有三个重点需要注意:

  1、“class”函数名的第一个字母要大写。这表明该函数的目的是被实例化而不是像一般函数一样被调用。

  2、在实例化的时候使用了new操作符。如果省略掉new而仅仅调用函数则会产生很多问题。

  3、因为getFullName指定给this操作符了,所以是公共可用的,但是fname和lname则不是。由Employee函数产生的闭包给了getFullName到fname和lname的入口,但同时对于其他类仍然是私有的。

  原型继承

  下面是JavaScript中原型继承的例子:

// 定义Human类
functionHuman() {
    this.setName =function(fname, lname) {
        this.fname = fname;
        this.lname = lname;
    }
    this.getFullName =function() {
        returnthis.fname +" "+this.lname;
    }
}
 
// 定义Employee类
functionEmployee(num) {
    this.getNum =function() {
        returnnum;
    }
};
//让Employee继承Human类
Employee.prototype =newHuman();
 
// 实例化Employee对象
varjohn =newEmployee("4815162342");
    john.setName("John","Doe");
alert(john.getFullName() +"'s employee number is "+ john.getNum());

  这一次,创建的Human类包含人类的一切共有属性——我也将fname和lname放进去了,因为不仅仅是员工才有名字,所有人都有名字。然后将Human对象赋值给它的prototype属性。

41/41234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号