私有属性和方法

私有属性和方法

作者:LAMP小白  点击:2056  发布日期:2013-01-05 23:12:00  返回列表

javaScript并没有特殊的语法来表示私有 保护 或公共属性和方法,这一点是和其他语言不同的


mio_lt;scriptmio_gt;
    var obj = {
        my: 1,
        get: function () {
            return 'aaa';
        }
    }
    console.log(obj.my);
    console.log(obj.get());
mio_lt;/scriptmio_gt;



虽然JavaScript拥有私有成员的特殊语法,但是可以使用闭包,来实现这种功能


mio_lt;scriptmio_gt;
    function get() {
        var name = 'haha';
        this.haha = function () {
            return name;
        }
    }
    var obj = new get();
    console.log(obj.name);
    console.log(obj.haha());
mio_lt;/scriptmio_gt;



我们只需要在函数中奖需要保持为私有的属性的数据包装起来,并确保他对函数来说是局部变量


私有性失效


私有性有时会出现一些情况:


1.FF早期的版本可以将第二个参数传递给eval(),而那是一个上下文对象,可以使潜入函数的私有作用域

2.直接从一个特权方法中返回一个私有变量,且该变量恰好一个对象或数组


mio_lt;scriptmio_gt;
    function get() {
        var name = {
            width: 300,
            height: 200
        };
        this.haha = function () {
            return name;
        }
    }
    var obj = new get();
    var r = obj.haha();
    console.log(r);
    r.width = 11111111111111;
    r = obj.haha();
    console.log(r);
mio_lt;/scriptmio_gt;



对这种意外的解决方式是保持细心,即不要传递保持私有性的对象或数组

也可以是特权方法返回一个新的对象,即最低授权原则(Principle Of Least Authority POLA)


mio_lt;scriptmio_gt;
    function get() {
        var name = {
            width: 300,
            height: 200
        };
        this.haha = function () {
            var hehe = name.width;
            return hehe;
        }
    }
    var obj = new get();
    var r = obj.haha();
    console.log(r);
    r = 11111111111111;
    r = obj.haha();
    console.log(r);
mio_lt;/scriptmio_gt;




上一篇:声明依赖关系 下一篇:快递查询API
0