作者:LAMP小白 点击:2173 发布日期: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