JavaScript中的私密性
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JavaScript中的私密性,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1690字,纯文字阅读大概需要3分钟。
内容图文
![JavaScript中的私密性](/upload/InfoBanner/zyjiaocheng/801/0ff8562718ef465f8b939c7c6e13c1c7.jpg)
我知道你可以通过使用闭包和立即调用函数在JavaScript中实现“私有性”.
但是,如果我需要全功能原型设计呢?我根本不知道在对象的原型中有私有成员.如果我使用特权方法,我可以拥有私有变量和公共方法,但我失去了原型设计的选项.
Douglas Crockford“禁止”使用悬空(在标识符前加上下划线表示它不是公共接口的一部分).
但使用它是不是很糟糕?因为没有办法让它真正私密.
你对此有何看法?你怎么处理它?
解决方法:
首先,在使用功能继承模式时,您并没有真正失去原型效果.我只是假设你在谈论好的部分,crockford还介绍了一种非常简单有效的方法来为该模式提供共享变量.基本上看起来像:
var Human = (function(my, priv) {
var my = my || {},
priv = priv || {};
my.privatedata = "foobar";
priv.walk = function() {
console.log('walking');
return priv;
};
priv.talk = function() {
console.log('blah blah');
return priv;
};
return priv;
}());
var Andy = (function(my, priv) {
var my = my || {},
priv = Human(my, priv);
priv.SpecialAndyThing = function() {
console.log('bloggin at typeofnan.com');
return priv;
};
return priv;
}());
var myAndy = Andy();
myAndy.talk().SpecialAndyThing();
你甚至可以简单地扩展这项技术,以获得一些超级方法.使用隐含变量约定(如下划线或诸如此类的东西)通常只是不好的做法.它令人困惑,因为没有人知道那里发生了什么(如果你是唯一一个使用代码库的人,那么这个论点可能会失败).
但是,ECMAscript Edition 5引入了一些好处,以便在原型链中拥有更多“私有”成员.一个重要的方法是.defineProperty,您可以在其中定义一个不“浅”的属性.看起来像:
var Human = {};
Object.defineProperty(Human, 'privateStuff', {
value: 'secret',
enumerable: false
});
现在,属性privateStuff对于从Human的原型链继承的对象是不可见的.无论如何,这个东西需要Javascript 1.8.5,目前仅在尖端浏览器中可用.见https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty
内容总结
以上是互联网集市为您收集整理的JavaScript中的私密性全部内容,希望文章能够帮你解决JavaScript中的私密性所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。