zoukankan      html  css  js  c++  java
  • 采用哪种方式(JS高级程序设计)

         目前使用最广泛的是混合的构造函数/原型方式。此外,动态原型方法也很流行,在功能上与构造函数/原型方式等价。可以采用这两种方式中的任何一种。不过不要单独使用经典的构造函数或原型方式。

         还记得构造函数是怎样的吗?

    function Tree (name,type) {

       this.name = name;

       this.type = type;

        …

    }

    var oTree = new Tree (“av”,"unknown”);        //实例化对象

        还有原型方式:

    function Tree() {

      Tree.prototype.name = “av”;

      Tree.prototype.type = “unknown”;

      …

    }

    var oTree = new Tree();    //实例化对象

         考虑下面的代码

    var str = “Hello”;
    
    str+ = “world”;

    实际上,这段代码在后面执行的步骤如下:

    1. 创建存储"Hello”的字符串。
    2. 创建存储"world”的字符串。
    3. 创建存储连接结果的字符串。
    4. 把str当前的内容复制到结果中。
    5. "world"复制到结果中。
    6. 更新str,使它指向结果。

      而下面的方法只用了两步:

    var arr = new Array;
    
    arr[0] = “helllo”;
    
    arr[1] = “world”;
    
    var str = arr.join(“”);
    1. 创建存储结果的字符串。
    2. 把每个字符串复制到结果中合适位置。

        这种方法很好,但是还好更好的方法。要使它更容易理解,可以用StringBuffer类打包该功能:

    function StringBuffer (){
    
      this._strings_ = new Array;
    
    }
    
    StringBuffer.prototype.append = function (str){
    
      this._strings_.push(str);
    
    };
    
    StringBuffer.prototype.toString = function () {
    
      return this._strings_.join(“ ”);
    
    }

        这段代码首先注意的是strings属性,本意是私有属性。它只有两个方法,即append()和toString()方法。append()只有一个参数,它把该参数回到字符串数组中,toString()方法调用数组的join()方法,返回真正连接成的字符串。要用StringBuffer对象连接一组字符串,可以用下面的代码:

    var buffer = new StringBuffer();
    
    buffer.append(“hello”);
    
    buffer.append(“world”);
    
    var result = buffer.toString();

        可用下面的代码测试StringBuffer对象和传统的字符串连接方法的性能:

    var d1 = new Date();
    
    var str = “”;
    
    for (var i=0;i<10000;i++){
    
      str+ = “test”
    
    }
    
    var d2 = new Date ();
    
    document.write(“Concatenation with plus:”+(d2.getTime() – d1.getTime())+”milloseconds”);
    
    var oBuffer = new StringBuffer ();
    
    d1 = new Date ();
    
    for(var i=0;i<10000;i++){
    
      oBuffer.append(“text”);
    
    }
    
    var sResult = buffer.toString ();
    
    
    
    d2 = new Date();
    
    document.write(“<br/>Concatenation with StringBuffer:”+(d2.getTime() – d1.getTime())+”milloseconds”);

       测试结果:使用StringBuffer类比使用加号节省50%-60%的时间。

  • 相关阅读:
    如何找回未保存过的 Excel 文件?
    js 下关于json的销毁和添加
    width:100%和width:auto区别
    在ie6下的png图片的兼容问题
    关于input=file的用法
    div+Css绝对定位(absolute)和相对定位(relative)的总结
    onmouseenter和onmouseleave的兼容性问题
    ckfinder的配置使用
    破解ckfinder2.3 去除版本号和标题提示
    jQuery制作图片的等比例缩放
  • 原文地址:https://www.cnblogs.com/coolicer/p/1825337.html
Copyright © 2011-2022 走看看