我爱Aspx >> Asp.Net >> 私有属性和使用JavaScript的信息隐藏铁杆的面向对象设计支持者会注意到,使用prototype方法向JavaScript对象增加属性和函数时,所增加的属性和函数都是公共的,所有其他对象都能访问。对于函数来说,这通常没什么问题,因为大多数函数都确实应当提供给外部客户。但是对于属性,面向对象设计的支持者就会指出,公共属性违反了信息隐藏的概念。面向对象设计称,对象的属性应当是私有的,因为外部客户不能直接访问。外部客户只能通过公共可用的函数来访问对象的私有属性。
对于JavaScript,同样有可能创建外部客户不能访问的私有属性,而只能通过对象的(公共)方法来访问,但这一点很少有人知道。Douglas Crockford提出了一种在JavaScript中创建私有属性的方法。这种方法非常简单,总结如下:
私有属性可以在构造函数中使用var关键字定义。
私有属性只能由特权函数(privileged functions)公共访问。特权函数就是在构造函数中使用this关键字定义的函数。外部客户可以访问特权函数,而且特权函数可以访问对象的私有属性。
下面来考虑前一个例子中的Vehicle类。 假设你想让wheelCount和curbWeightInPounds属性是私有的,只能通过公共方法访问。新的Vehicle对象则如代码清单5-4所示。
代码清单5-4 重写后的Vehicle对象
function Vehicle() {
var wheelCount = 4;
var curbWeightInPounds = 4000;
this.getWheelCount = function() {
return wheelCount;
}
this.setWheelCount = function(count) {
wheelCount = count;
}
this.getCurbWeightInPounds = function() {
Ҷƪл˵?
通过prototype属性建立面向对象的..[05-20]
使用JSDoc建立JavaScript代码的文..[05-20]
使用JSLint完成JavaScript语法检..[05-20]
完成JavaScript压缩和模糊处理[05-20]
JavaScript本地图片预览程序[05-20]
三种JavaScript进度条[05-20]
超酷JavaScript菜单类[非常漂亮][05-20]
JavaScript实现AJAX的拖动效果[05-20]
使用javascript实现两个listbox中..[05-20]
不停向上滚动的图片 JavaScript[05-20]
通过prototype属性建立面向对象的..[05-20]
使用JSDoc建立JavaScript代码的文..[05-20]
使用JSLint完成JavaScript语法检..[05-20]
完成JavaScript压缩和模糊处理[05-20]
使用Firefox的Web开发扩展包[05-20]
微软提供的ASP.NET 2.0空间,你还..[05-20]
JavaScript本地图片预览程序[05-20]
Visual Studio 2005 中的新的 Da..[05-20]
应用程序块的性能测试[05-20]
服务器应用程序不可用 [asp.net2..[05-20]