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 ...
随机推荐
- Webservice-WSDL详解(三)
怎样向别人介绍WS的功能呢?一般咱们会写接口文档,亦或口头告诉使用的人.这些方式都存在问题:其中一个我上篇中说过,客户端是无法直接使用服务端接口的:二是程序员在电脑前,想使用WS时,他们的工具(如Ec ...
- Arachnid包含一个简单的HTML剖析器能够分析包含HTML内容的输入流
Arachnid是一个基于Java的web spider框架.它包含一个简单的HTML剖析器能够分析包含HTML内容的输入流.通过实现Arachnid的子类就能够开发一个简单的Web spiders并 ...
- 模式匹配KMP
字符串朴素模式匹配算法的2种实现: //1.朴素的模式匹配算法,用while实现 int StrStr_While(const char* pStr, const char* pSub, int* p ...
- JQuery - 根据节点获取对应的id,可用于留言板
可以用于留言版的,点击展看和收起.显示评论等等功能. 效果: ----------------- html代码: JQuery代码:
- 第一个hibernate文件 xml配置方法
package com.entity; public class User { private String username; private String password; private In ...
- JVM --字节码的加载
ClassLoader类加载器 常见的类加载器有BootStrapClassLoader<-ExtClassLoader<-AppClassLoader<-用户ClassLoader ...
- 演练2-2:Guestbook示例应用程序
为使Guestbook应用程序有用,我们需要为用户提供一些提交数据的方式,将这些数据存储起来,以便稍后进行查看.为了达到这一目标,我们打算对应用程序添加一个数据库,将其作为该留言簿的后台存储库. 1. ...
- keepalive的 nopreempt 非抢占
通常如果master服务死掉后backup会变成master,但是当master服务又好了的时候 master此时会抢占VIP,这样就会发生两次切换对业务繁忙的网站来说是不好的.所以我们要在配置文件加 ...
- Android Socket 开发技术
根据之前的经验,应用软件的网络通信无非就是Socket和HTTP,其中Socket又可以用TCP和UDP,HTTP的话就衍生出很多方式,基础的HTTP GET和POST请求,然后就是WebServic ...
- 使用 HTML5 webSocket API实现即时通讯的功能
project下载地址:http://download.csdn.net/detail/wangshuxuncom/6430191 说明: 本project用于展示怎样使用 HTML5 webSock ...