闭包N个作用
2012-04-10 15:26 刘联东 阅读(182) 评论(0) 编辑 收藏 举报闭包作用域是一只很难驯服的野兽
一个函数的作用域取决于其定义的地方(户口按出生地原则),因此导致了很多诡异的技巧。
1. js 类继承中的闭包作用域
function A(){
var num = 0;
}
p = new A();
function B(){}
B.prototype = p;
这样B在构造子类的时候实际上只调用了A的构造函数一次。这样A的所有子类共享一个原型空间(即p的私有空间)。 公开变量和方法则会被重构。
如果要避免这种情况可以让B构造子类的时候重构一个原型空间,即指定
B.constructor = A;
2. 闭包提高数据安全性
闭包可以将处理的方法和属性隐藏,可以提高属性的安全性,只对外提供必要的函数接口,对数据和实现细节进行隐藏。
function Collection(elementtType){
var type = elementtType || Object;
var arr = [];
var check = function(data){
for(var i=0; i<data.length; i++){
if(! data instanceof type) TypeError();
}
return true;
}
this.setArray = function(dv ){
( dv instanceof Array) ? (check(dv) && arr =dv ): TypeError();
}
this.setData(idx , v){
(v instanceof type) && idx <arr.length && arr[idx] =v || Error();
}
this.getData = function(){
return arr;
}
}
该方法将集合的数组隐藏不允许用户直接需改数组,而且可以将类型检查等机制隐藏在函数内部,即使用户使用属性打印等方法也无法获得实现的细节。
3. 闭包异步加载中的使用
参考:【动态加载JS】
4. 代理模式中的使用
....自己发挥相信