• 一种JavaScript 类的设计模式


    一种JavaScript 类的设计模式
    尽管前面介绍了如何定义一个类,如何初始化一个类的实例,但既可以在function定义
    的函数体中添加成员,又可以用prototype 定义类的成员,代码显的很混乱,和面向对象语
    言类的实现之间有着很大的区别。那么,如何以一种清晰的方式来定义类呢?下面给出了一
    种类的实现模式,并将它们对应到面向对象语言类的实现上。
    类的构造函数用来初始化一个实例,是每个类必不可少的一部分。在传统意义的面向对
    象中,类的构造函数的名称和类的名称一致,同时它们的定义方式和类成员的定义是类似而
    又相互独立的。而在JavaScript中,由于对象的灵活的性质,在构造函数中也可以为类添加
    成员,在增加灵活性的同时,也增加了代码的复杂度。为了提高代码的可读性和开发效率,
    完全可以抛弃这种定义成员的方式,而使用prototype 对象来替代,这样function 的定义就
    是类的构造函数,符合传统意义类的实现:类名和构造函数名是相同的。例如:
    function class1(){
    //构造函数
    }
    //成员定义
    class1.prototype.someProperty=”sample”;
    class1.prototype.someMethod=function(){
    //方法实现代码
    }
    虽然上面的代码对于类的定义已经清晰了很多,每定义一个属性或方法,都需要使用一
    次class1.prototype,不仅代码体积变大,而且易读性还不够。为了进一步改进,可以使用无
    类型对象的构造方法来指定prototype对象,从而实现类的成员定义:
    //定义一个类class1
    function class1(){
    //构造函数
    }
    //通过指定prototype对象来实现类的成员定义
    class1.prototype={
    someProperty:”sample”,
    someMethod:function(){
    //方法代码
    },
    …//其他属性和方法.
    }
    上面的代码用一种很清晰的方式定义了class1,构造函数直接用类名来实现,而成员使
    用无类型对象来定义,以列表的方式实现了所有属性和方法,并且可以在定义的同时初始化
    属性的值。这也更类似于传统意义面向对象语言中类的实现。只是构造函数和类的成员定义
    被分为了两个部分,不妨将其看成JavaScript中定义类的一种固定模式,这样在使用时会更
    加容易理解。
    注意:在一个类的成员之间互相引用,必须通过this 指针来进行,例如在上面例子中的someMethod 方
    法中,如果要使用属性someProperty,必须通过this.someProperty的形式,因为在JavaScript中每
    个属性和方法都是独立的,它们通过this指针联系在一个对象上。

  • 相关阅读:
    Node.js Express框架
    Node.js Web模块
    Node.js 工具模块
    Node.js GET/POST请求
    Node.js 文件系统
    Node.js 常用工具
    【day03】Xhtml
    【day02】Xhtml
    【紫书】【重要】Not so Mobile UVA
    【紫书】Tree UVA
  • 原文地址:https://www.cnblogs.com/shaohz2014/p/3826108.html
Copyright © 2020-2023  润新知