Heero's Blog

Heero's Blog » 前端开发

公布新开发的Js框架Libra

明天就是春节了,趁着过年前的最后一天,公布一下之前提到过的新开发的Js框架Libra。项目地址是 http://code.google.com/p/libra/

Libra采用了类似YUI的架构,带有按需加载版本管理机制,由核心以及各种扩展模块组成。核心部分相当于一个挂架,开发人员可以编写扩展并“挂”到上面去;而要用这个扩展的时候,也要从挂架上把它“取”出来。

要在HTML页面上使用Libra,只需要导入核心文件和模块配置文件即可:

<script type="text/javascript" src="libra-0.1.0.js"></script>
<script type="text/javascript" src="libra-config.js"></script>

Libra只占用一个全局变量,即Libra。Libra对象只有两个方法,分别是add和use。

Libra.add用于添加扩展模块。要注意的是,Libra是带有版本管理机制的,添加一个模块的时候必须指定其版本号。例如:

Libra.add("style", "0.1.0", function(L) {
  // ...

多余的逗号

JSON

在JSON格式中,逗号是多个属性键值对间的分隔符,例如:

var json = { id: 1, name: 'heero' };

但在编程的时候,很容易会画蛇添足,在最后一对键值对后也加上了逗号

var json = { id: 1, name: 'heero', };

在这种情况下,IE6、7会报错,但IE8以及其他浏览器则没有问题。

数组

在数组中,逗号是元素间的分隔符,例如:

var arr = [1, 2, 3];

同样地,我们也有可能不小心在最后一个元素后加了逗号

var arr = [1, 2, 3,];

凭直觉来说,这应该是错误的语法。但实际上,所有浏览器都对这种情况实现了兼容,包括IE6。考虑这样一段示例代码:

Array的push与unshift方法性能分析

Array的pushunshift方法都能给当前数组添加元素,不同的是,push是在末尾添加,而unshift则是在开头添加。从原理就可以知道,unshift的效率是较低的。原因是,它每添加一个元素,都要把现有元素往下移一个位置。但到底效率差异有多大呢?下面来测试一下。

测试环境的主要硬件:CPU T7100(1.8G);内存4G DDR2 667;硬盘5400转。主要软件:操作系统为Windows 7;浏览器为Firefox 3.6.9。测试代码:

var arr = [ ], s = +new Date;

// push性能测试
for (var i = 0; i < 50000; i++) {
  arr.push(i);
}

console.log(+new Date - s);

s = +new Date;
arr = [

前端模板引擎

说起模板引擎,很多人会认为这是后台的东西(如PHP的Smarty、Java的Velocity),跟前端没有关系。然而,随着前端的逻辑变得越来越复杂,引入模板技术已经是非常必要了。

模板引擎的主要功能就是把变化的数据融入到不变的模板中,并生成最终结果。目前,前端的主要数据格式无非是XMLJSON

如果选择XML作为数据格式,XSLT就是最佳的模板语言。大三时做的一个社团网站就是采用了这样的模式。XML+XSLT的缺点非常明显:

  • 兼容性问题。XML+XSLT在不同浏览器下的转换方式有所不同。
  • XML、XSLT的语法都是极其冗余的,数据量相对较大。

如果选择JSON作为数据格式,似乎没有原生的模板语言可用,只能生拼

jQuery.animate简单分析

很久之前就对jQuery.animate的实现非常感兴趣,不过前段时间很忙,直到前几天端午假期才有时间去研究。

jQuery.animate的每种动画过渡效果都是通过easing函数实现的。jQuery1.4.2中就预置了两个这样的函数:

easing: {
  linear: function( p, n, firstNum, diff ) {
    return firstNum + diff * p;
  },
  swing: function( p, n, firstNum, diff ) {
    return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
  }
}

从参数名隐约可以推测出firstNum是初始值。要是你的数学学得比较好,你可以发现linear函数是直线方程;要是你的物理学得比较好,你可以发现它是匀速运动的位移方程(我数学和物

再论Javascript的类继承

说到Javascript的类继承,就必然离不开原型链,但只通过原型链实现的继承有着不少缺陷。

无参数类继承的问题

先看一段示例代码,实现B继承于A:

function A() {
}
A.prototype.a1 = function() {
};

function B() {
}
B.prototype = new A();
B.prototype.b1 = function() {
};

var b = new B();
alert(b.constructor == A); // true
alert(b.constructor == B); // false

这段代码的主要问题是:

  • 需要实例化A作为B的原型,此时就执行了A的构造函数。但按照面向对象的规则,实例化B之前,B及其父类A的构造函数都不应该执行
  1. 第一页
  2. 上一页
  3. 1
  4. 2
  5. 3
  6. 4
  7. 5
  8. 下一页
  9. 末页