【发布时间】:2014-02-21 07:43:25
【问题描述】:
全部-
伟大的 Douglas Crockford 在此处描述了一种在 Javascript 中实现信息隐藏的经典模式:
http://javascript.crockford.com/private.html
我还知道我在这里演示的另一个: http://jsfiddle.net/TvsW6/4/
总结如下:
function LogSystem(anotherPrivateVar) {
//. .
var _setting1;
this.setting2;
function _printLog(msg) {
$("#" + _divId).append(msg + "<br/>");
};
return {
printLog :function(msg) {
console.log("PRINTING:" + msg);
_printLog(msg);
},
logSetting_pub: function() {
this.printLog("PUB: Setting1 is: " + _setting1);
this.printLog("PUB: Setting2 is: " + this.setting2);
}
//..
};
};
问题
除了这两种模式之外,还有其他模式可以在 JavaScript 中实现公共和私有方法和成员吗?这两种模式有名称吗?而你对这两个(或更多!)有偏好吗?
非常感谢您的帮助。我发现了解原始 JavaScript 中的高级主题是罕见的技能,我想拥有它们!
【问题讨论】:
-
我不喜欢你的第二种方法,因为返回的对象本身没有类型(它不是
LogSystem的实例)并且没有LogSystem()构造函数这两个函数在某些情况下都很有用。 -
我很欣赏这个论点。我希望有权衡,但这些肯定是缺点。谢谢!
-
嘿,你的 cmets 真的让我想到了。请你看看这里好吗? stackoverflow.com/questions/21944115/…
-
好的,我读过那篇文章。你想问什么?
-
好吧,如果您对那里的问题有任何启发,那就太好了。对我来说最大的谜团是如何使用“公共”成员而不是公共方法。它就像函数必须在返回对象中,但简单的公共变量却没有。
标签: javascript object-oriented-analysis