JS的作用域保护
2020-05-02 12:10
676 查看
网页中,如果引用了许多JS,尤其是动态加载,那么其中的变量、函数名称就很容易冲突。虽然每个名称加上前缀可以解决这个问题,但未免太烦琐了。应该尽量用函数将它们包裹起来。面向对象三大特性之一是封装,对私有变量和方法进行保护,javascript没有类,只有函数。幸运的是,JS的函数是万能的,可以用来封装。
一、构造实例
例子:
var f = new function(){ let _i = 0; //这里的this,应该是指向f this.hi = function(){ alert(_i); }; this.go = function(){ _i = add(_i); }; function add(i){ return ++i; } }; f.hi();//0 f.go(); f.hi();//1
这个例子里面,封装了私有变量_i和私有方法:add(),对外只暴露了hi()和go()。对于重名问题,我们只需控制 f 这个变量就行了,冲突机会大大下降。
二、静态类库
所谓静态类库,实质上就是一个JSON,元素是函数。
例子:
var f2 = (function(){ var _i = 0; return {//返回一个JSON hi:hi, go:go }; function hi(){ alert(_i); } function go(){ _i = add(_i); } function add(i){ return ++i; } })(); f2.hi(); f2.go(); f2.hi();
也能达到相同的效果。但是,这种方式的封装性比不上第一种,体现在其变量,一定要用"var"进行声明,并且要放在函数头部,否则无法使用;私有函数则没有限制。
三、执行块
如果无须考虑复用,只避免重名,那么可以将语句用函数包裹并即时执行,这种方式同样也有良好的封装性:
(function(){ let _i = 0; _i = add(_i); alert(_i); function add(i){ return ++i; } })();左直拳 博客专家 原创文章 1140获赞 356访问量 352万+ 关注 他的留言板
相关文章推荐
- js 中的console.log有什么作用
- JS闭包的运用及匿名函数的作用
- JS小菜之作用域
- Js的script标签中的id作用
- js变量以及其作用域详解
- 火狐浏览器怎么查看页面加载了那些js文件,那系js文件有作用
- 对类的私有变量起保护作用的访问函数
- JS作用域与new关键字——长期更新
- 保护系统安全-让‘windows任务管理器’对话框失去作用
- WEB前端学习二 JS作用域和作用域链
- js的词法作用域、执行环境、作用域链
- 保护自己的源码js禁止右键和复制(Ctrl+C)
- js变量,及作用范围
- 浅谈JS作用域
- 密保保护提问 下拉框联动互斥js效果
- js 无代码块级作用域
- JS作用域为“函数级作用域”,记住最简明的一句“函数中声明的所有变量,无论是在哪里声明的,在整个函数中它们都是有定义的。”QQ253079952
- AngularJS Scope(作用域)
- js学习笔记之高级--作用域+作用域链+闭包
- javascript中apply方法和call方法的作用以及prototype.js中的应用