闭包N个作用

本文探讨了JavaScript中闭包的应用,包括类继承、数据安全提升及异步加载等方面,并介绍了如何利用闭包实现数据隐藏和类型检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

闭包作用域是一只很难驯服的野兽

一个函数的作用域取决于其定义的地方(户口按出生地原则),因此导致了很多诡异的技巧。

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. 代理模式中的使用

  ....自己发挥相信

转载于:https://www.cnblogs.com/liandong/archive/2012/04/10/2441141.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值