js中静态函数与变量
⼀私有变量和函数
js中没有概念上的私有,公有也没有静态和⾮静态相关概念,有的只能是通过作⽤于来模仿
函数的块级作⽤域使得函数内部成员可以不被外部所访问,⽐如我们使⽤块级作⽤于定义⼀个类
//定义⼀个命名空间,⽤于相关类挂靠到该空间下,使得外部通过该命名空间访问某个类型
var MyLib = window.MyLib = MyLib || {};
(function{
  // 在函数内部 name 是不会被外部直接能够访问的,除⾮通过⽅法暴露接⼝
  var name='';
  //同样的道理,如果定义⼀个函数,那么他也是属于该函数块级作⽤域私有函数并且并不属于某⼀个实例
  function Hello(){};
函数prototype  //使⽤函数表达式定义⼀个类,如果仅使⽤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的原型⽅法向外暴露接⼝
Name=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;
}
所谓的增强只是⼀种说法⽽已,并没有建的通过字⾯量创建的对象就没有开放,其实对外都是开放的,只不过内部的成员是不开放了,也许这就是所谓的半闭半开吧

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。