zoukankan      html  css  js  c++  java
  • 犀牛书学习笔记(7):定义和使用类或对象

    严格来说,javascript没有类,但为了便于理解,我们将类和对象当做同一个概念来说。

    javascript有很多种定义类的方式,这还真有点狗血,选择太多必然增加了语言的复杂度,所以我们需要评估、选择合适的方式。

    类或对象定义

    我们先看看JAVA类定义方式

    class Car {
      public String color = "blue";
      public int doors = 4;
      public int mpg = 25;
    
      public Car(String color, int doors, int mpg) {
        this.color = color;
        this.doors = doors;
        this.mpg = mpg;
      }
      
      public void showColor() {
        System.out.println(color);
      }
    }

    javascritp推荐定义方式:混合构造函数和原型的方式

    function Car(sColor,iDoors,iMpg) {
      this.color = sColor;
      this.doors = iDoors;
      this.mpg = iMpg;
      this.drivers = new Array("Mike","John");
    }
    
    Car.prototype.showColor = function() {  //使用Car对象的原型添加方法showColor
      alert(this.color);
    };

    //到这里,类定义完成
    var oCar1 = new Car("red",4,23); var oCar2 = new Car("blue",3,25);
    oCar1.triger=function(){             //给类实例oCar1对象添加一个方法triger       
      //body 
    }
    oCar1.drivers.push("Bill"); alert(oCar1.drivers); //输出 "Mike,John,Bill" alert(oCar2.drivers); //输出 "Mike,John"

    1、首先定义了构造函数构造函数Car,构造函数具有多个参数,这里只定义属性,属性值可通过参数值传递进行初始化。请注意函数属性的定义方式,需要使用this,this的值是实例化类

    后的对象。

    2、Car.prototype是调用类的原型,为原型增加方法showColor,为其赋值一个匿名函数,这样就算给类car定义了方法,还记得前面说到吗,类的方法就是赋值给一个类属性的函数。

    3、oCar1是类Car的实例,new操作符创建了一个没有任何属性的对象,然后调用构造函数,如果构造函数有参数,可以给参数赋值。新的对象会赋值给this,

    这就是一个类定义,包括定义属性和方法,并通过类实例化对象的过程。

    类或对象动态性

    javascript这类弱类型语言,通常也称为动态语言,弱类型带来修改类型的灵活性。想想JAVA,类都是预先定义好的,实例化成对象之后,运行过程中一般都不会修改。采用反射自省方式才能动态修改类,往往成为高级编程技巧,且会非常大的影响性能。

    使用prototype,可以非常方便的为任意对象修改属性和方法。

    创建新方法

    Number.prototype.toHexString = function() {
      return this.toString(16);
    };
    // 为Number对象创建新方法

    重命名方法

    Array.prototype.enqueue = function(vItem) {
      this.push(vItem);
    };
    
    Array.prototype.dequeue = function() {
      return this.shift();
    };
    
    //添加两个新方法封装覆盖了已有方法

    为本地对象添加方法

    Object.prototype.showValue = function () {
      alert(this.valueOf());
    };
    
    var str = "hello";
    var iNum = 25;
    str.showValue();        //输出 "hello"
    iNum.showValue();        //输出 "25"
    
    // 给 ECMAScript 中每个本地对象添加新方法,必须在 Object 对象的 prototype 属性上定义它。所有本地对象都继承了 Object 对象,所以对 Object 对象做任何改变,都会反应在所有本地对象上。

    定义类的时候可考虑定义的方法

    • toString()
    • valueOf()
    • compareTo()
  • 相关阅读:
    数据库的读读事务也会产生死锁
    数据库中的two phase locking
    排序合并连接(sort merge join)的原理
    SQL Server2016 原生支持JSON
    公司内部培训SQL Server传统索引结构PPT分享
    postgresql的ALTER经常使用操作
    POJ 1458 Common Subsequence(最长公共子序列LCS)
    Docker 1.3 公布
    spring bean之间的关系:继承;依赖
    hdu 1215 七夕节
  • 原文地址:https://www.cnblogs.com/laohoo/p/3421252.html
Copyright © 2011-2022 走看看