google reader 代码分析

4 views
Skip to first unread message

kindy

unread,
Sep 23, 2007, 5:34:46 AM9/23/07
to Unitjs
近来用 google reader 比较多,一时兴起就开始分析它的脚本代码。不想浪费了看那么多的东西,就把看到的记录下来至此。

函数的绑定(bind) 功能,可以绑定 thisP 和 arguments
function(a,b){//函数绑定 a 是一个函数,b 是 thisP,更多的参数会作为 a 的参数在 a 执行时添加到参数列表的前

var c=a.fw;//如果 a 被 lb 过,则有这个参数列表 c 是一个 Array
if(arguments.length>2){// 把更多的参数添加到参数列表里
var d=Array.prototype.slice.call(arguments,2);
if(c){
//不明白这里为什么不写 d=c.concat(d) 难道 c 可能不是数组?或者是写代码的人不知道 concat
的用法 或者是为了兼容旧浏览器
d.unshift.apply(d,c)
}
c=d
}
b=a.hw||b;//如果 a 有作用域,则用 a 自己的,否则用给的
a=a.gw||a;//如果 a 被 lb 过,则 a.gw 是原始的 a
var e,f=b||qa; //e 是要返回的函数,f 是作用域 qu=window
if(c){//参数列表
e=function(){
var g=Array.prototype.slice.call(arguments);
g.unshift.apply(g,c);
return a.apply(f,g)
}
}else{
e=function(){
return a.apply(f,arguments)
}
}
e.fw=c;//给创建的函数留个记号
e.hw=b;
e.gw=a;
return e
}

类(函数)的继承,觉得这个做的很巧妙,把我以前的很多困扰都解开了。
function(a,b){//让 a 继承 b
function c(){}
c.prototype=b.prototype;
a.F=b.prototype;
a.prototype=new c;
a.prototype.constructor=a
}
以前我一直不知道该怎么避免构造函数做的那些事情,即设置 a 的prototype 时候怎么避免调用 b 的构造函数,他这里新建了一个函数
c ,就这么轻松的解决了。


暂时先这 2 个,我还要继续看。
发觉这些代码好像不是一个人写的,好多地方有重复性的东西,
不过这没关系,
整体还是非常有用的。

Reply all
Reply to author
Forward
0 new messages