zoukankan      html  css  js  c++  java
  • javascript面对对象编程

    JavaScript中是其实不存在所谓“类”的概念,因为它并不是面向对象的语言。在面向对象中,一个最常见的说法就是:“类”是“对象”的模板,基本上都是采用语言内置的Classclass关键字来定义“类”。而JavaScript不存在这个概念,所以也没有提供类似的关键字(虽然classJavaScript的关键字,但是至今都没有实现,只是被保留而已)。

    因此,在JavaScript中创建类就唯有使用模拟的方式,而模拟的手法多种多样,何时采用何种方式最合适,需视情况而定。以下就记录下常见的几种模式。

    一.工厂模式

    工厂方法是设计模式中非常基础的,也被广泛用于面向对象编程中。而在JavaScript中,通过工厂方法即能模拟出类的行为。

    function Person(name, sex) {
      var obj = {};
      obj.name = name;
      obj.sex = sex;
      obj.getName = function() {
        return this.name;
      };
      return obj;
    }
    var personA = Person('lucy', 'male');
    var personB = Perosn('路人甲', 'male');

    通过这样类似的工厂方法,就可以创建出多个相似的对象了,但是这样的方式其抽象度极低。面向对象编程中,对象是可以检测出类型的,但是采用上面这种方式,是没有办法进行对象类型识别的。

    二.构造函数模式

    其实,这应该是很常见的模式了,很多书上基本上一来就是讲这个的,更狠点的可能就只讲这个…

    function Person(name, sex) {
      this.name = name;
      this.sex = sex;
      this.getName = function() {
        return this.name;
      }
    }
    var personA = new Person('lucy', 'male');
    var personB = new Person('路人甲', 'male');

    这种模拟类方式的特点就是:

    1.没有显示的创建对象 
    2.直接将属性和方法赋给了this对象 
    3.没有return字句

    在使用这种方式时,创建对象则必须使用new关键字。当然,好处就是完全解决了对象类型识别问题。

    三.原型模式

    原型应该是JavaScript中一个很有意思,当然也是很有用的一个概念了。接下来用原型模式来模拟类。

    function Person() {}
    Person.prototype = {
      name: null,
      sex: null,
      getName: function() {
        return this.name;
      }
    };
    var personA = new Person;
    personA.name = 'lucy';
    personA.sex = 'male';
    var personB = new Person;
    personB.name = '路人甲';
    personB.sex = 'male';

    四.组合使用构造函数和原型模式

    由于只用原型模式的话,会带来一些问题,所以常规情况下,都是采用组合构造函数和原型模式来创建类,这也是使用率最高的一种方式。

    function Person(name, sex) {
      this.name = name;
      this.sex = sex;
    }
    Person.prototype.getName = function() {
      return this.name;
    };
    var personA = new Person('lucy', 'male');
    var personB = new Person('路人甲', 'male');
    personA.getName(); //"heroic"
    
  • 相关阅读:
    动态规划股票购入卖出
    输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
    java模拟死锁
    从上往下打印出二叉树的每个节点,同层节点从左至右打印。
    java 多线程
    把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
    目录操作
    获取文字高度以及根据label内容来调整label的高度
    视图抖动动画
    带有背景显示加载中的activity
  • 原文地址:https://www.cnblogs.com/yanypan/p/2717811.html
Copyright © 2011-2022 走看看