js 模拟实现php类中的静态变量

来源:互联网 发布:钢琴调音软件 编辑:程序博客网 时间:2024/06/16 06:51

js是弱类型语言,而且对面向对象编程支持度不够高,它没有命名空间也没有类,但是可以间接的实现类的部分功能,今天就来鲁一鲁js实现类中的静态变量:

静态变量:简单的理解就是每个类的实例所共享的,一个实例对静态变量修改,再另一个实例对象中也对静态变量修改,实际上不同对象修改的和获取的是同一个变量。

静态变量的实现机制:静态变量之所以能够实现对象之间共享,原理和对象的引用一样,在每个类里面,并不是直接存放静态变量的值,而是静态变量的值对应的地址,也就是说每个实例都拥有相同的一个地址,指向同一个变量,这样就能达到共享的目的了。

php 静态变量的实现:

<?php 

 class Penson{

    public static $num=0;//统计类被实例的次数,实际上类里面存放的是num变量的一个地址

   public function __construct(){

   //在构造函数执行的时候对静态变量进行修改

   self::$num+=1;

    }

}

echo Penson::$num;  //0;说明一个问题,php中的静态变量不依靠实例对象存在而存在,一会在js中也可以实现

$zs=new Penson();

$ls=new Penson();

echo Penson::$num;  //2;

?>


js静态变量的实现:

(function(){

 var num=0;

 Penson=function(){

  //这个函数就相当于Penson类的构造函数

  num++;

  this.showNum=function(){

    console.log(num);//这个方法就是通过对象访问num的方法

  }

  }

})();


$zs=new Penson();

$ls=new Penson();

$ls.showNum();//2

$zs.showNum();//2

但是,如果没有实例化的时候就没办法访问num了,怎么实现这个呢,非常简单:

(function(){

 var num=0;

 Penson=function(){

  //这个函数就相当于Penson类的构造函数

  num++;

 Penson.num=num;//这里是为了可以用类来访问静态变量

  this.showNum=function(){//这里是通过对象来访问静态变量

    console.log(num);//这个方法就是通过对象访问num的方法

  }

  }

Penson.protopyte.num=num;//没有实例对象的时候访问静态变量,有实例的时候就不能这样访问了

})();


Penson.protopyte.num;//0

$zs=new Penson();

$ls=new Penson();


$zs.showNum();//  2通过对象来访问静态变量

$ls.showNum();//  2

Penson.num;//2 通过类来访问静态变量

ps:头痛加感冒,实在鲁不动了,今天就到这了,注意两点:

js本身没有类,是通过闭包来实现类似的功能的,当然,也可以通过全局变量 来实现,但是这就不是面向对象了

php的静态变量不依附于对象的存在而存在,但是这个js的例子则依附于对象,只是没有实例的时候另外处理才能访问到静态变量而已


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 车辆咨询服务门市怎么办营业执照 被互盾科技骗了怎么办 家具生意不好怎么办啊 今年家具店生意不好怎么办 奶茶店位置不好怎么办 早餐店位置不好怎么办 木工做的不好怎么办 淘宝昵称改不了怎么办 淘宝店关门售后怎么办 店里生意不好怎么办?解决方案 淘宝店铺没有生意怎么办 淘宝店做大了应该怎么办 汽车维修没生意怎么办 淘宝买家具安装怎么办 投标时未记主材费结算时怎么办 不敢买自慰棒怎么办 车被扎了个洞怎么办 企业欠税交不起怎么办 组织代码查不到怎么办 u盾电量不足怎么办 对公账户拍照怎么办 个人怎么办对公账户 车辆超过年检日期怎么办 手机cpu负载过高怎么办 移动数据上网慢怎么办 服务器密码忘记了怎么办 网吧电脑卡死了怎么办 局域网连接不上怎么办 电脑没有dns地址怎么办 无法连接版本服务器怎么办 登录游戏就死机怎么办 亿企薪税保没有绑定企业怎么办 众筹如果不成功怎么办 淘宝被投诉商标权怎么办 茅台贴标褶皱怎么办 ins取不了名字怎么办 ins密码忘了怎么办 ins不记得密码怎么办 ins账号被停用怎么办 电脑登录不上怎么办 电脑桌面密码忘记了怎么办