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 ...
随机推荐
- HTTP 301 跳转和302跳转的区别
常用的重定向方式有: 301 redirect, 302 redirect 与 meta fresh: 301 redirect::301代表永久性转移(Permanently Moved),301重 ...
- MYSQL设计优化
本文将从各方面介绍优化mysql设计的一些方式. 1.优化sql语句 (1)定位须要优化的sql语句 1)show status统计SQL语句频率 对Myisam和Innodb存储引擎都计数的參数: ...
- android Listview,gridview局部刷新,部分刷新
众所周知Listview和Gridview的刷新界面的方式是调用adapter.notifyDataSetChanged()进行界面刷新. 但是此方法有其弊端,他是将界面中的数据全部刷新一遍,不论数据 ...
- sql2008r2局域网复制订阅实操
10.129.186.37 本机 10.129.186.95 服务器 局域网环境 复制类型:事务复制 注意点:要复制的表,必须有主键,否则不可选复制表. 要点1,局域网尝试用共享的方式保存快照文件夹, ...
- C#反射 入门学习 02
获取Type类型的构造函数 前言 有了前面的 C#反射 入门学习 01的知识,学习这篇估计是搓搓有余,它教会了我们获取方法的相关信息的两种形式与 使用反射调用方法, ...
- 在Delphi开发的服务中调用指定应用程序
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://fxh7622.blog.51cto.com/63841/529033 在很多时候 ...
- 高性能MySql学习笔记——锁、事务、隔离级别(转)
为什么需要锁? 因为数据库要解决并发控制问题.在同一时刻,可能会有多个客户端对Table1.rown进行操作,比如有的在读取该行数据,其他的尝试去删除它.为了保证数据的一致性,数据库就要对这种并发操作 ...
- zookeeer 集群和伪集群模式
环境变量设置: # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # U ...
- 统一横轴墨卡托投影(UTM)
UTM 坐标系统使用基于网格的方法表示坐标.UTM 系统将地球分为 60 个区,每一个区基于横轴墨卡托投影.画图法中的地图投影方法能够在平面中表示一个两维的曲面,比如一个标准地图.图 1 展示了一个横 ...
- 【Lucene】近实时搜索
近实时搜索:可以使用一个打开的IndexWriter快速搜索索引的变更内容,而不必首先关闭writer,或者向该writer提交:这是2.9版本之后推出的新功能. 代码示例(本例参考<Lucen ...