• js模拟的静态私有变量


         严格的来讲,js里面并没有静态与私有的概念,所有成员属性都是公开的,下面只是参考OO语言,通过某种方式来实现类似的概念。

    一。静态变量

        1.私有静态变量

           所有实例共享。因为是私有的变量,所以不能通过函数名直接访问。通过闭包来实现。

           根据闭包的作用域原理,只能在闭包内部访问。所以,并不是类的任何地方都可以访问这个静态变量。只有类的构造函数或者方法(原型方法),在闭包内部才可以访问。

            

    Js代码  收藏代码
    1. (function(){  
    2.   
    3.         var privateStatic = "privatestatic";  
    4.   
    5.         Func = function(){  
    6.             this.setPrivateStatic = function(value){  
    7.                 privateStatic = value;  
    8.             }  
    9.             this.getPrivateStatic = function(){  
    10.                 return privateStatic;  
    11.             }  
    12.         }  
    13.     })();  
    14.   
    15.     var func1 = new Func();  
    16.     var func2 = new Func();  
    17.     console.log(func1.getPrivateStatic());// privatestatic  
    18.     console.log(func2.getPrivateStatic());// privatestatic  
    19.   
    20.     console.log(func1.setPrivateStatic('changed'));   
    21.     console.log(func2.getPrivateStatic()); //changed  

        2.公共静态变量

           这个比较简单,直接对函数定义属性。

           Backbone的extend函数,有两个参数,第一个参数是实例变量,第二个参数是静态变量。期中静态变量的实现就是这种方式。

         

    Js代码  收藏代码
    1. Func = function(){  
    2.         this.test = 'test';  
    3.     }  
    4.     Func.acfun= 'net';  
    5.     console.log(Func.acfun); //net  

    二。实例变量

    1.私有实例变量

    在构造函数里面,通过var定义的变量,都是私有实例变量,只有在构造的内部才能访问。 

         

    Js代码  收藏代码
    1. var Person = function(value){  
    2.         var age =value;  
    3.         this.getAge = function(){  
    4.             return age;  
    5.         }  
    6.     }  
    7.     Person.prototype._getAge = function(){  
    8.         return age;  
    9.     }  
    10.   
    11.     var yaoming = new Person('27');  
    12.     console.log(yaoming.age) //undefined  
    13.     console.log(yaoming.getAge()) //27  
    14.     console.log(yaoming._getAge()) // age is not defined,原型方法不能访问age,仅在构造函数内部可以访问私有实例变量  

        2.公共实例变量

        在构造函数或原型方法中使用this定义的属性,以及原型中定义的属性.

        使用new 操作符对构造函数是实例化,会创建一个新的对象,并且将构造函数的作用域赋给新对象,并执     行代码,那么构造函数中如果有this定义属性或方法,则是对新对象添加属性或方法。

        

    Js代码  收藏代码
      1. var Person = function(name){  
      2.       this.name = name;  
      3.   }  
      4.   Person.prototype.age = '11';  
      5.   
      6.   var yaoming = new Person('ym');  
      7.   console.log(yaoming.name);  
      8.   console.log(yaoming.age); //11 
  • 相关阅读:
    【leetcode】1324. Print Words Vertically
    【leetcode】1323. Maximum 69 Number
    【leetcode】1320. Minimum Distance to Type a Word Using Two Fingers
    【leetcode】1319. Number of Operations to Make Network Connected
    7系列GTX中的疑惑
    8b10b
    hB
    MATLAB实现最优低通滤波器的函数
    modelsim读写TXT文件
    ILA用法
  • 原文地址:https://www.cnblogs.com/dragon-zhong/p/4743924.html
Copyright © 2020-2023  润新知