模块:
一个提供接口却隐藏状态与实现的函数或对象。利用模块其实可以完全来屏蔽对全局对象的使用。下面有个比较经典的例子:
String.method('deentityify',function(){
var entity = {
quot: '"',
lt: '<',
gt:'>'
};
return function(){
return this.replace(/&([^&;]+);/g,function(){
var r = entity[b];
return typeof r==='string'?r:a;
});
};
}();)
注意最后一行的(),这个实际的给string添加的函数是return的函数。
这样就可以很好的利用模块来,保护好entity变量。
级联
有些方法没有返回值,如果由于某些原因不想让他返回undifined而是返回this,就可一利用级联了。
getElement('myDiv').move(350,150).width(100).height(100)...;
套用:
套用允许我们将函数与传递给他的参数相结合产生一个新的函数
function.method('curry',function(){
var slice = Array.prototype.slice,
args = slice.apply(arguments),
that = this;
return function (){
return that.apply(null,args.concat(slice.apply(arguments)));
};
});
var add1 = add.curry(1);
document.writlen(add1(6));
记忆:
函数借助对象来记住先前在函数中所计算的结果。
var fibonacci = function(){
var nemo = [0,1];
var fib = function(n){
var result = memo[n];
if(typeof result != 'number'){
result = fib(n - 1)+fib(n - 2);
memo[n] = result;
}
return result;
};
}();
一个提供接口却隐藏状态与实现的函数或对象。利用模块其实可以完全来屏蔽对全局对象的使用。下面有个比较经典的例子:
String.method('deentityify',function(){
var entity = {
quot: '"',
lt: '<',
gt:'>'
};
return function(){
return this.replace(/&([^&;]+);/g,function(){
var r = entity[b];
return typeof r==='string'?r:a;
});
};
}();)
注意最后一行的(),这个实际的给string添加的函数是return的函数。
这样就可以很好的利用模块来,保护好entity变量。
级联
有些方法没有返回值,如果由于某些原因不想让他返回undifined而是返回this,就可一利用级联了。
getElement('myDiv').move(350,150).width(100).height(100)...;
套用:
套用允许我们将函数与传递给他的参数相结合产生一个新的函数
function.method('curry',function(){
var slice = Array.prototype.slice,
args = slice.apply(arguments),
that = this;
return function (){
return that.apply(null,args.concat(slice.apply(arguments)));
};
});
var add1 = add.curry(1);
document.writlen(add1(6));
记忆:
函数借助对象来记住先前在函数中所计算的结果。
var fibonacci = function(){
var nemo = [0,1];
var fib = function(n){
var result = memo[n];
if(typeof result != 'number'){
result = fib(n - 1)+fib(n - 2);
memo[n] = result;
}
return result;
};
}();
这个函数中,memo就是一个记忆对象。
对于这一篇,大部分是可以明白,但是在实际用时确实没怎么注意过。这个也许在以后写代码的多了就可遇到了吧。
暂且吧,几个例子放在这,便于以后理解使用。