现在的位置: 首页 > 综合 > 正文

采用哪种方式(JS高级程序设计)

2012年09月25日 ⁄ 综合 ⁄ 共 1571字 ⁄ 字号 评论关闭

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

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

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%的时间。

抱歉!评论已关闭.