js模拟的静态私有变量

Javascript静态变量与实例变量

博客分类:

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

一。静态变量

1.私有静态变量

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

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

Js代码  

  1. (function(){
  2. var privateStatic = "privatestatic";
  3. Func = function(){
  4. this.setPrivateStatic = function(value){
  5. privateStatic = value;
  6. }
  7. this.getPrivateStatic = function(){
  8. return privateStatic;
  9. }
  10. }
  11. })();
  12. var func1 = new Func();
  13. var func2 = new Func();
  14. console.log(func1.getPrivateStatic());// privatestatic
  15. console.log(func2.getPrivateStatic());// privatestatic
  16. console.log(func1.setPrivateStatic(‘changed‘));
  17. 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. var yaoming = new Person(‘27‘);
  11. console.log(yaoming.age) //undefined
  12. console.log(yaoming.getAge()) //27
  13. 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. var yaoming = new Person(‘ym‘);
    6. console.log(yaoming.name);
    7. console.log(yaoming.age); //11
时间: 2024-10-13 19:28:48

js模拟的静态私有变量的相关文章

关于私有变量,静态私有变量

有权访问私有变量和私有函数的公有方法称之为特权方法,对象上创建特权方法的方式有两种. 第一种:直接在构造函数中定义特权方法,基本模式如下 function MyObject(){ var privateVariable = 10; function privateFunction(){ alert(1); } this.publicMethod = function(){ privateVariable++; return privateFunction(); }//特权方法 } var aa

js:私有变量和静态私有变量 | 访问私有属性

JS 函数(6)—私有变量

私有变量 私有变量 任何在函数中定义的变量,都可以认为是私有变量,因为不能在函数的外部访问这些变量. 私有变量包括函数的参数.局部变量和在函数中定义的其它函数. 特权方法:有权访问私有变量和私有函数的方法. 有两种在对象上创建特权方法的方式:其一是在构造函数中定义特权方法. 1 function MyObject() { 2 //私有变量和私有函数 3 var privateVariable = 10; 4 function privateFunction() { 5 return true;

JS中如何在外部引用私有变量的两种方法 复习

引用:https://blog.csdn.net/liwenfei123/article/details/77964222 运用闭包的特权方法 在构造函数中定义特权方法 这种模式在构造函数中定义了所有私有变量和函数. 能够在构造函数中定义特权方法是因为特权方法作为闭包,能够访问在构造函数中定义的所有变量和函数. function product(){ var name='yuxiaoliang'; this.getName=function(){ return name; } } var obj

7.4 私有变量

严格来讲,JavaScript并没有什么私有变量的概念,但是从作用域的角度来看,一个是全局,函数: 在函数中定义的变量都可以称之为 私有变量:因为不能在函数外部访问: 1 function add(num1,num2){ 2 var sum = num1 + num2; 3 return sum; 4 } 上面代码完成两个数字累加,函数内部声明三个私有变量,num1, num2, sum. 在函数内部可以访问这几个变量,但函数外部则不能访问它们. 如果在这个函数内部创建一个闭包,那么闭包通过自己

javascript在私有作用域中定义私有变量和私有函数 (1)

javascript没有私有成员,但是有私有变量,所有对戏那个属性都是公有的 任何在函数中定义的变量,都可以认为是私有变量,因为函数内部不能访问. 私有变量包括:函数的参数.局部变量.函数内部定义的其他函数 - 在私有作用域中定义私有变量和私有函数 function MyObject(){ //私有变量和私有函数 var privateVariable=10; function privateFunction(params) { return false } //特权方法----有权访问私有变量

私有变量

严格来讲,Javascript中没有私有成员的概念:所有对象属性都是公有的.不过,倒是有一个私有变量的概念.任何在函数中定义的变量,都可以认为是私有变量,因为不能再函数的外部访问这些变量.私有变量包括函数的参数.局部变量和在函数内部定义的其他函数.来看下面的例子: function add(num1,num2){ var sum = sum1 + sum2; return sum; } 在这个函数内部,有三个私有变量:num1.num2和sum.在函数内部可以访问这个变量,但在函数外部则不能访问

函数中的私有变量和特权方法

定义 [1][私有变量] 任何在函数中定义的变量,都可以认为是私有变量,因为不能在函数外部访问这些变量.私有变量包括函数的参数.局部变量和在函数内部定义的其他函数 [2][特权方法] 如果在函数内部创建一个闭包,那么闭包通过自己的作用域链也可以访问这些变量.而利用这一点,就可以创建用于访问私有变量的公有方法.有权访问私有变量和私有函数的公有方法称为特权方法. 创建方式 [1][构造函数] 在构造函数内部定义所有私有变量和函数.然后,创建能够访问这些私有成员的特权方法.能够在构造函数中定义特权方法

递归、闭包、私有变量、特权方法、单例、模块模式(module pattern)

//使用命名函数表达式实现递归 var factorial = (function f(num) {     if (num <= 1) {         return 1;     } else {         return num * f(num - 1);     } }); //用作块级作用域(私有作用域)的匿名函数 (function(){     var now = new Date();     if (now.getMonth() == 0 && now.get