一 私有变量和函数

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中静态函数与变量的更多相关文章

  1. 在JS中调用JAVA变量

    在JS中调用JAVA变量可以,方法是:var JS变量名 = “<%=JAVA变量名 %>”<%中间写java代码,跟在JSP中一样%>在JAVA中 ,无法调用JS变量

  2. js语法没有任何问题但是就是不走,检查js中命名的变量名,用 service-area错误,改service_area (原)

    js语法没有任何问题但是就是不走,检查js中命名的变量名,用 service-area错误,改service_area

  3. js中的定义变量之①用不用var

    var 是js定义变量的意思. 由于js中的变量是弱类型的,因此js中的所有变量包括number(数字型).string(字符串类型).boolean(布尔类型,true和false)等均通过var关 ...

  4. JS中的let变量

    介绍JS中的let变量: let允许你声明一个作用域被限制在块级中的变量.语句或者表达式.在Function中局部变量推荐使用let变量,避免变量名冲突. 作用域规则 let 声明的变量只在其声明的块 ...

  5. js中,var 修饰变量名和不修饰的区别

    js中 允许在定义变量的时候 不加var 修饰符.js会在当前作用域下寻找上下文是否定义了此变量, 如果没有找到则会为这个变量分配内存.当且将其视为window的成员. 也就是全局变量. 如果加了va ...

  6. js中, 用变量或对象作为if或其他条件的表达式

    源: 因为js是弱语言, 就体现在js的变量是弱类型的, 在js中所有变量类型声明都用var, 而在其他强类型语言中,如java/c,必须有强制类型转换和类型检查才能编译通过等, 但是: 弱语言也有优 ...

  7. JS中for循环变量作用域--解决for循环异步执行的问题

    被这个问题困惑了很久,终于在网上找到了答案,感谢~ 现在分享给大家~ js中如何让一个for循环走完之后,再去执行下面的语句? 这涉及for循环变量作用域的问题,js中作用域只有函数作用域和全局作用域 ...

  8. js中不能做变量名的字符

    JavaScript中不能作为变量名的关键字和保留字总结: 1.js中的关键字: break case catch continue default delete do else finally fo ...

  9. JS中的this变量的使用介绍

    在JavaScript中this变量是一个令人难以摸清的关键字,this可谓是非常强大,在本文将为大家详细介绍下JavaScript中this的使用,感兴趣的朋友可以参考下. JavaScript中t ...

随机推荐

  1. qq邮箱是怎么做到同一个浏览器让多个不用用户同时打开的? --session的控制

    待解:..... 借鉴网址:http://www.zhihu.com/question/20235500 欢迎来讨论.....

  2. 多个线程怎样操作同一个epoll fd

    自己曾经做一个接口server时候,这样的场景下我的设计是多个线程操作同一个epoll fd.彼时,我的理由是epoll的系列函数是线程安全的. 当然有人不理解为什么会有多个线程操作同一个epoll ...

  3. Android模拟器的文件目录介绍

    文件存放在 .avd文件夹下 .ini为对应的配置文件     打开.avd文件夹 *.lock文件夹保存的是模拟器的一下数据,当模拟器正常关闭时这些文件夹都会被自动删除. 当模拟器无法开启的时候可以 ...

  4. 简易视频播放器2 (基于Qt、opencv)

    因项目需要,需要实现一个对以保存的监测视频快速查看功能. 查询网上一些资料,初步简易的实现了一下. 实际效果图: 该程序基于Qt5.4,opencv248,开发环境为win8.1 结构为: video ...

  5. 高性能MySql学习笔记——锁、事务、隔离级别(转)

    为什么需要锁? 因为数据库要解决并发控制问题.在同一时刻,可能会有多个客户端对Table1.rown进行操作,比如有的在读取该行数据,其他的尝试去删除它.为了保证数据的一致性,数据库就要对这种并发操作 ...

  6. python核心编程--笔记

    python核心编程--笔记 的解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找pyt ...

  7. 基于visual Studio2013解决算法导论之002归并排序

     题目 归并排序 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <malloc.h> #in ...

  8. centos7安装codeblocks教程

    author:lidabo 装了好多次系统,每次装的时候都有要在网上各种查,太麻烦了.所以决定记录一下,以后用到的时候会方便一些.当然,本文来源于网络,取百家之长,最重要的是本人已验证过,说明对本系统 ...

  9. 区间dp-zoj3541-The Last Puzzle

    题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3541 题目大意: 在数轴上,有n个按钮,位置递增为d1,d2, ...

  10. Swift - .plist文件数据的读取和存储

    每次在Xcode中新建一个iOS项目后,都会自己产生一个.plist文件,里面记录项目的一些配置信息.我们也可以自己创建.plist文件来进行数据的存储和读取. .plist文件其实就是一个XML格式 ...