JavaScript:函数表达式-私有变量

本文详细介绍了JavaScript中如何使用私有变量和特权方法,包括构造函数、静态私有变量、模块模式和增强模块模式的实现方式。通过具体代码示例,展示了不同场景下私有变量的访问和保护策略。

私有变量包括:函数的参数、局部变量和在函数内部定义的其他函数

    function add(num1, num2) {
        var sum = num1 + num2;
        return sum;
    }

在这个函数内部,有3个私有变量:num1num2sum。在函数内部可以访问这几个变量,但在函数外部则不能访问他们。

如果在这个函数内部创建一个闭包,那么闭包通过自己的作用域链也可以访问这些变量。利用这一点,就可以创建用于访问私有变量的公有方法(称为特权方法)。

1.在构造函数中定义特权方法:

    function MyObject() {
        // 私有变量和私有函数
        var privateVariable = 10;

        function privateFunction() {
            return false;
        }

        //特权方法
        this.publicMethod = function () {
            privateVariable++;
            return privateFunction();
        };
    }

2.静态私有变量实现特权方法
通过在私有作用域中定义私有变量或函数,实现创建特权方法:

    (function () {
        // 私有变量和私有函数
        var privateVariable = 10;

        function privateFunction() {
            return false;
        }

        // 构造函数
        MyObject = function () { // 初始化未声明的变量,总是会创建一个全局变量,能够在私有域之外被访问到
        };

        // 公有/特权方法
        MyObject.prototype.publicMethod = function () { // 使用函数表达式定义构造函数,因为函数声明只能创建局部函数
            privateVariable++;
            return privateFunction();
        };
    })();

由于特权方法实在原型上定义的,因此所有实例都使用同一个函数。而这个特权方法,作为一个闭包,总是保存着对包含作用域的引用。

3.模块模式
模块模式是为单例创建私有变量和特权方法的

var singleton = function () {
        // 私有变量和私有函数
        var privateVariable = 10;

        function privateFunction() {
            return false;
        }

        // 特权/公有方法和属性
        return {
            publicProperty: true,
            publicMethod: function () {
                privateVariable++;
                return privateFunction();
            }
        };
    }();

这个模块模式使用了一个返回对象的匿名函数。

4.增强的模块模式
有人改进了模块模式,即在返回对象之前加入对其增强的代码。这种方式适合那些单例必须是某种类型的实例的情况。

    var singleton = function () {
        // 私有变量和私有函数
        var privateVariable = 10;

        function privateFunction() {
            return false;
        }

        // 创建对象
        var object = new CustomType();
        
        // 特权/公有方法和属性
        object.publicProperty = true;
        object.publicMethod = function () {
            privateVariable++;
            return privateFunction();
        }
        return object;
    }();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡 亥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值