对 如何写出可维护的面向对象javascript译文的一些记录

当遇到写比较大型复杂的B/S--js的情况是,面向对象的写法绝对是你最优 的选择。一直想往这方面走,所以要一点点理解面向对象的本质,只有这样,才能从底层,从大脑的基础思维中找到使用面向对象的写法去开发的习惯。

花些时间和精力去关注这个话题对自己来说是比较有价值的,会找些这些方面的文章,然后加上自己的理解,以便学习分享。

 

*******************************

什么是OO

面向对象编程可以比较基本地展现你代码中抽象自现实物质的对象。在代码中创建一个对象,我们需要先创建一个类。类几乎可以表示任何东西:账户,雇 员,导航菜单,车辆,植物,广告,饮料,等等。然后,每次你创建一个对象,你要从一个类中继承下来。换句话说,你创建了类的一个实例,从而提供了一个可以 操作的对象。实际上,使用对象的最佳时机就是当你要应付多个食物。否则,一个简单的函数型程序也会表现的一样好。对象本质上是一个数据的容器。比如在雇员 的对象中,你可以存进他们的雇工号,名字,起始时间,头衔,薪资,特权等等…对象也包括了一些函数(也叫做方法)去操作数据。方法也可以用来充当一个中间 人来确保数据完整。这个中间人通常用来在存储前转换数据。比如,一个方法可以接受一个任意格式的数据然后把这个数据转换成标准数据并存储进去。最后类可以 继承自其他类。继承机制允许你去重用其他类的代码。比如,银行账户类和影音商店帐号类可以都继承自一个基础帐号类,这个基础帐号的类可以提供一些配置信 息,帐号创建时间,分支信息等等。然后,每一个继承出来的类都可以定义自己的汇报和租金,控制数据结构和方法。-----------分析类,对象,继承,重用等很重要的概念。这是面向对象编程最基本也是最重要的概念,务必理解,要从根本上。

 

注意:javascript OO是不同于其他语言的OO的

在前一节我已经指出了一个基于类的面向对象编程的基本特点。我把它成为基于类的编程,因为javascript并不遵守这些规则。 javascript类是以函数的形式表现,继承方法是用基于原型的方式实现。原型继承和其他类的继承有很大的区别,他们是继承自含有原型属性的对象。---------挑出js中面向对象编程的不同之处,这需要我们特殊对待。

下面要给出标准的实例来说这些概念。

对象的实例化

这里有一个实例化对象的例子。

// Define the Employee class
function Employee(num, fname, lname) {
    this.getFullName = function () {
        return fname + " " + lname;
    }
};
 
// Instantiate an Employee object
var john = new Employee("4815162342", "John", "Doe");
alert("The employee's full name is " + john.getFullName());

有一些地方必须得注意一下:

1.我将类名的首字母大写了。这个重要的区别可以让人们知道这是一个用来实例化的类,而不是作为一个普通方法来调用的。

2.我使用”new”操作符来实例化类。如果在实例化的时候忘了写上new会导致直接执行这个函数。---new 这东西,需要好好玩,有很多难以理解的点,不用new去实例化会有怎样的结果,用了又有什么意义。。。

3.getFullName这个方法是对外开放的,因为这个方法是注册在this对象上的,而fname和lname是私有的变量,不对外开放。 Employee函数创建的闭包允许getFullName函数去访问fname和lname,而让其他方法都无法直接访问到fname和lname。

原型继承

这里有一个原型继承的例子

// Define Human class
function Human() {
    this.setName = function (fname, lname) {
        this.fname = fname;
        this.lname = lname;
    }
    this.getFullName = function () {
        return this.fname + " " + this.lname;
    }
}
 
// Define the Employee class
function Employee(num) {
    this.getNum = function () {
        return num;
    }
};
// Let Employee inherit from Human
Employee.prototype = new Human();
 
// Instantiate an Employee object
var john = new Employee("4815162342");
    john.setName("John", "Doe");
alert(john.getFullName() + "'s employee number is " + john.getNum());

我创建了一个Human类,里面包括了一些人类应该有的属性–我也在Human类里设置了fname和lname,因为所有的人类,不仅仅是雇员才有名字。然后我让雇员类的原型指向Human对象,这样就扩展了雇员类的属性。

通过继承的方式重用代码

在前一个例子里,我将原来的Employee类分割成两个。我把所有一个人类应该有的属性都转移到Human类里,然后让Employee类去继承 Human类的属性。这样的话,Human类里有的属性可以继承给其他对象,比如Student, Client, Citizen, Visitor等等。这是一个非常棒的方式去重用代码,这样我们就不用重复地给每一个对象设置重复的属性。而且如果我们想增加一个属性,比如say,或者 middle name,那么我们只需要修改一次就可以让所有的继承自Human类的类都拥有这个属性。相反,如果我们只想增加一个middle name属性给一个对象,我们可以直接修改这个对象,而不用去修改Human

转载于:https://www.cnblogs.com/webDevelop/archive/2012/08/29/2661953.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值