它们是什么,我们如何制作它?你能举个例子吗?
答案 0 :(得分:8)
例如,避免与多个库发生冲突。
假设他们都使用常用的变量,例如data
。如果两个库都使用私有变量,那就没关系了:
var lib1 = (function() {
var data;
return {
get: function() { return data },
set: function(v) { data = v }
};
})();
// Supposed to do something different:
var lib2 = (function() {
var data;
return {
get: function() { return data },
set: function(v) { data = v }
};
})();
lib1.set(123);
lib2.set(456);
lib1.get(); // 123
lib2.get(); // 456
但是假设他们不使用私有变量,而是使用这样的全局变量:
var lib1 = (function() {
return {
get: function() { return data },
set: function(v) { data = v }
};
})();
// Supposed to do something different:
var lib2 = (function() {
return {
get: function() { return data },
set: function(v) { data = v }
};
})();
lib1.set(123);
lib2.set(456);
lib1.get(); // 456 - overwritten by lib2. lib1 might not work properly anymore.
lib2.get(); // 456
因此lib1.get()
将获取与lib2.get()
相同的数据。
这个例子当然太明显了,但为了保持安全,使用私有变量是一个好习惯。
答案 1 :(得分:3)
变量被封装在一个类中以阻止它们的名称冲突。这些可以是公共的或私人的。有时需要确保仅使用设置变量的函数更改变量。例如,需要验证日期的某些部分,以阻止某人设置无效日期,例如2月45日。
var factorial = (function(){
var precog = [1,1];// ===undefined for other indices, N = undefined || N
return function(y){
return precog[y] || (precog[y]=y*arguments.callee(y-1));
};
})();
这是一个带有私有预编码的JavaScript函数。这将存储以前计算的值,并且它是私有的,以阻止它们被操纵。
答案 2 :(得分:0)
我认为名称空间存在多个原因。我理解的一种方法是:private
,protected
和public
表达式在团队环境中有很多帮助,以便其他开发人员不会最终使用< em>方法你不打算他们。话虽这么说,只有当方法或属性只需要由同一个对象访问时,才使用private
。当需要继承类来承载相同的功能时使用protected
,当不同类的对象需要访问您的对象时使用public
。
例如:
班级Victim
有
班级Robber
有
Robber->profile()
需要访问Victim->appearsToBeRich
。如果Victim->appearsToBeRich
返回true
,则该Victim
对象将被抢劫。 Robber
对象永远不需要运行Victim->haveAnxiety
,因为只要Victim
对象开始被抢劫,this->haveAnxiety()
就会Victim
运行。
当然,现实世界的例子比我的例子更复杂 LOT (我希望它们更加优雅)。无论如何,我希望有所帮助。