js中静态函数与变量
一 私有变量和函数
js中没有概念上的私有,公有也没有静态和非静态相关概念,有的只能是通过作用于来模仿
函数的块级作用域使得函数内部成员可以不被外部所访问,比如我们使用块级作用于定义一个类
//定义一个命名空间,用于相关类挂靠到该空间下,使得外部通过该命名空间访问某个类型
var MyLib = window.MyLib = MyLib || {};
(function{
// 在函数内部 name 是不会被外部直接能够访问的,除非通过方法暴露接口
var name='';
//同样的道理,如果定义一个函数,那么他也是属于该函数块级作用域私有函数并且并不属于某一个实例
function Hello(){};
//使用函数表达式定义一个类,如果仅使用var定义一个函数表达式,函数外部也是访问不到的因此需要增加一个命名空间“MyLib”
var Person=MyLib.Person=function(){
this.name=''xx';
}
Person.prototype.say=function(){
alert('speack chinese');
}
})()
使用该类型
var p=new MyLib.Person();
注意此时是不能访问到name变量和Hello函数,因为没有任何形式将其暴露到外部,所以这2个成员属于(function(){})()块级作用域私有静态成员,对于类的实例来说,name和函数hello也均是静态的共享的。
如果有需要访问该2个成员是 我们可以通过Person的原型方法向外暴露接口
Person.prototype.getName=function(){
return name;//注意返回的name而不是this.name;这两则是有明显区别的
}
二 块级模式
看代码
var appInfo=function(){
var appName='xxx';
var showInfo=function(){
alert('appinfo');
}
return {
appName:appName,
Info:showInfo
}
}
所谓的块级模式其实就是单例模式,某个类型的数据封装只有一份实例,通过字面量向外暴露接口,可见其本事上函数表达式和函数作用于的杰作
再则所谓的块级增强模式,见代码
var appInfo=function(){
var appName='xxx';
var showInfo=function(){
alert('appinfo');
}
var App=new Object();
App.appName=appName;
App.Info=showInfo;
return App;
}
所谓的增强只是一种说法而已,并没有建的通过字面量创建的对象就没有开放,其实对外都是开放的,只不过内部的成员是不开放了,也许这就是所谓的半闭半开吧
js中静态函数与变量的更多相关文章
- 在JS中调用JAVA变量
在JS中调用JAVA变量可以,方法是:var JS变量名 = “<%=JAVA变量名 %>”<%中间写java代码,跟在JSP中一样%>在JAVA中 ,无法调用JS变量
- js语法没有任何问题但是就是不走,检查js中命名的变量名,用 service-area错误,改service_area (原)
js语法没有任何问题但是就是不走,检查js中命名的变量名,用 service-area错误,改service_area
- js中的定义变量之①用不用var
var 是js定义变量的意思. 由于js中的变量是弱类型的,因此js中的所有变量包括number(数字型).string(字符串类型).boolean(布尔类型,true和false)等均通过var关 ...
- JS中的let变量
介绍JS中的let变量: let允许你声明一个作用域被限制在块级中的变量.语句或者表达式.在Function中局部变量推荐使用let变量,避免变量名冲突. 作用域规则 let 声明的变量只在其声明的块 ...
- js中,var 修饰变量名和不修饰的区别
js中 允许在定义变量的时候 不加var 修饰符.js会在当前作用域下寻找上下文是否定义了此变量, 如果没有找到则会为这个变量分配内存.当且将其视为window的成员. 也就是全局变量. 如果加了va ...
- js中, 用变量或对象作为if或其他条件的表达式
源: 因为js是弱语言, 就体现在js的变量是弱类型的, 在js中所有变量类型声明都用var, 而在其他强类型语言中,如java/c,必须有强制类型转换和类型检查才能编译通过等, 但是: 弱语言也有优 ...
- JS中for循环变量作用域--解决for循环异步执行的问题
被这个问题困惑了很久,终于在网上找到了答案,感谢~ 现在分享给大家~ js中如何让一个for循环走完之后,再去执行下面的语句? 这涉及for循环变量作用域的问题,js中作用域只有函数作用域和全局作用域 ...
- js中不能做变量名的字符
JavaScript中不能作为变量名的关键字和保留字总结: 1.js中的关键字: break case catch continue default delete do else finally fo ...
- JS中的this变量的使用介绍
在JavaScript中this变量是一个令人难以摸清的关键字,this可谓是非常强大,在本文将为大家详细介绍下JavaScript中this的使用,感兴趣的朋友可以参考下. JavaScript中t ...
随机推荐
- perl 使用use utf8
jrhapt12:/home/tomcat> cat a1.pl use Encode; $phone='18072722237'; open (LOG1 ,"<",' ...
- C++的Json解析库:jsoncpp和boost
C++的Json解析库:jsoncpp和boost - hzyong_c的专栏 - 博客频道 - CSDN.NET C++的Json解析库:jsoncpp和boost 分类: 网络编程 开源库 201 ...
- win8安装驱动提示文件哈希值不在指定的目录文件中,此文件可能已损坏或被篡改解决办法
解决办法: 1. 按快捷键win+R 打开运行命令 2. (请先看完后面的再操作!!)运行输入 shutdown.exe /r /o /f /t 00 3. 点击确定 4. 系统将重启 5. 重启后点 ...
- Hadoop: the definitive guide 第三版 拾遗 第十章 之Pig
概述: Pig的安装很简单,注意一下几点: 1.设置系统环境变量: export PIG_HOME=.../pig-x.y.z export PATH=$PATH:$PIG_HOME/bin 设置完成 ...
- Codeforces 331A2 - Oh Sweet Beaverette (70 points)
贪心搞就行,用map记录每个数出现的下标,每次都取首尾两个.将中间权值为负的删掉后取sum值最大的就行. #include<iostream> #include<algorithm& ...
- Linux定义系统提示符的变量:PS1
- 安卓android WebView Memory Leak WebView内存泄漏
Android WebView Memory Leak WebView内存泄漏 在这次开发过程中,需要用到webview展示一些界面,但是加载的页面如果有很多图片就会发现内存占用暴涨,并且在退出该界面 ...
- php实现加好友功能
思路: 1用户发送好友申请之后 把申请储存到申请数据表中,状态为 未验证 2 当用户登录时,查询申请表中是否有uid和被申请人id相同的,如果同意,更改状态,并把数据插入到对应的好友数据表否则,删除申 ...
- PHP:根据IP地址获取所在城市
文件目录: ipLocation -----qqwry ----------QQWry.Dat -----ipCity.class.php ipCity.class.php文件代码: <?php ...
- 服务启动错误1053,一例解决方案(给用户添加NetworkService权限)
WIndows XP的服务中,有一个服务需要以NT AUTHORITY/NetworkService用户启动,但怎么也启动不起来,使用本地系统帐户启动没有任何问题,但是换成NetworkServic ...