• Javascript 实现私有成员变量


    Javascript 方法中这样写的话,相当于声明了成员变量:

    View Code
    1 function foo() {
    2 this.data =0;
    3 }

    但当我们试图访问它时仍会出错:

    View Code
    1 function bar() {
    2 // foo.data未定义
    3 alert(foo.data);
    4 }

    这时可以通过使用new关键字来解决,就像我们实例化类一样:

    function bar() {
    theFoo
    =new foo();
    alert(theFoo.data);
    }

    但是问题也来了,Javascript没有访问修饰符,那么将导致所有成员变量都是公有的,为了解决这个问题做个试验,结果就没有办法再访问foo的实例theFoo.data了,这是因为方法调用完毕后,方法体内声明的变量也将消失了,而data现在已经不是成员变量,而是仅仅是方法体中的一个变量:

    function foo() {
    var data =0;
    }

    function bar() {
    theFoo
    =new foo();
    // theFoo.data未定义
    alert(theFoo.data);
    }

    但如果在方法退出后仍存一个成员方法在对这个变量进行引用,那么这个变量就仍然会存在,并且只有这个方法才能访问此变量,例如:

    function foo() {
    var data =0;

    this.setData =function () {
    data
    ++;
    alert(data
    );
    }
    }

    最后写成了这样,调用bar方法试试,没有办法直接访问data变量了,但它的值会累加(方法调用结束后变量没有消失),这样就实现了私有成员变量的模拟:

    function foo() {
    var data =0;

    this.setData =function () {
    data
    ++;
    alert(data);
    }
    }
    // 为了防止每次调用bar方法时都新建立foo的实例theFoo
    // 将实例化的部分放到了bar的外面
    var theFoo =new foo();
    function bar() {
    theFoo.setData();
    }

    也许模拟类时更爱这样写,不过这并不是最重要的:

    var foo =function () {
    var data =0;

    this.setData =function () {
    data
    ++;
    alert(data);
    }
    }

    笔记做完了。

  • 相关阅读:
    二次方程优化(二)之 Quadratic Form
    二次方程优化(一)
    马尔可夫链(一)
    指数分布和泊松过程总结
    泊松过程(二)
    泊松过程(一)
    指数分布
    线性规划中的单纯形法与内点法(原理、步骤以及matlab实现)(四)
    线性规划中的单纯形法与内点法(原理、步骤以及matlab实现)(三)
    201521123079《java程序设计》第11周学习总结
  • 原文地址:https://www.cnblogs.com/javennie/p/2125842.html
Copyright © 2020-2023  润新知