Feb 2
- 作者:heero
- 时间:2011-2-2 20:01
明天就是春节了,趁着过年前的最后一天,公布一下之前提到过的新开发的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) {
// ...
Dec 15
- 作者:heero
- 时间:2010-12-15 12:40
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。考虑这样一段示例代码:
Sep 14
- 作者:heero
- 时间:2010-9-14 16:54
Array的push与unshift方法都能给当前数组添加元素,不同的是,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 = [
Jul 26
- 作者:heero
- 时间:2010-7-26 19:23
说起模板引擎,很多人会认为这是后台的东西(如PHP的Smarty、Java的Velocity),跟前端没有关系。然而,随着前端的逻辑变得越来越复杂,引入模板技术已经是非常必要了。
模板引擎的主要功能就是把变化的数据融入到不变的模板中,并生成最终结果。目前,前端的主要数据格式无非是XML和JSON。
如果选择XML作为数据格式,XSLT就是最佳的模板语言。大三时做的一个社团网站就是采用了这样的模式。XML+XSLT的缺点非常明显:
- 兼容性问题。XML+XSLT在不同浏览器下的转换方式有所不同。
- XML、XSLT的语法都是极其冗余的,数据量相对较大。
如果选择JSON作为数据格式,似乎没有原生的模板语言可用,只能生拼
Jun 19
- 作者:heero
- 时间:2010-6-19 20:22
很久之前就对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函数是直线方程;要是你的物理学得比较好,你可以发现它是匀速运动的位移方程(我数学和物
Jun 12
- 作者:heero
- 时间:2010-6-12 22:12
说到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的构造函数都不应该执行。