2007-11-26

javascript私有属性和信息隐藏

关键字: javascript私有属性和信息隐藏
xml 代码
  1. 私有属性在构造函数中用var关键字定义,私有属性只能用特权函数公用访问,特权函数是在构造函数中用this关键字定义的函数。私有属性不能使用点记法来访问,只能用公用函数访问。   
  2. 如下是个例子   
  3.   
  4. function Vehicle() {   
  5.     var wheelCount = 4;   
  6.     var curbWeightInPounds = 4000;   
  7.   
  8.     this.getWheelCount = function() {   
  9.         return wheelCount;   
  10.     }   
  11.   
  12.     this.setWheelCount = function(count) {   
  13.         wheelCount = count;   
  14.     }   
  15.   
  16.     this.getCurbWeightInPounds = function() {   
  17.         return curbWeightInPounds;   
  18.     }   
  19.   
  20.     this.setCurbWeightInPounds = function(weight) {   
  21.         curbWeightInPounds = weight;   
  22.     }   
  23.   
  24.     this.refuel = function() {   
  25.         return "Refueling Vehicle with regular 87 octane gasoline";   
  26.     }   
  27.   
  28.     this.mainTasks = function() {   
  29.         return "Driving to work, school, and the grocery store";   
  30.     }   
  31. }   
  32.   
  33. function SportsCar() {   
  34.     this.refuel = function() {   
  35.         return "Refueling SportsCar with premium 94 octane gasoline";   
  36.     }   
  37.   
  38.     this.mainTasks = function() {   
  39.         return "Spirited driving, looking good, driving to the beach";   
  40.     }   
  41. }   
  42.   
  43. function CementTruck() {   
  44.     this.refuel = function() {   
  45.         return "Refueling CementTruck with diesel fuel";   
  46.     }   
  47.   
  48.     this.mainTasks = function() {   
  49.         return "Arrive at construction site, extend boom, deliver cement";   
  50.     }   
  51. }   
评论
zcfg 2007-12-03
好像是Ajax基础教程里的代码 我说怎么这么眼熟`` 建议看这篇 http://www.nirvanastudio.org/javascript/private-members-in-javascript.html
zcfg 2007-12-03
看你这个例子还不如看这个 http://www.nirvanastudio.org/javascript/private-members-in-javascript.html 对Douglas Crockford的原文翻译 讲的非常清楚
afcn0 2007-11-26
那你这就牵强了,那比如
c=new test;
c.ddd=function(){alert(a)}

这个ddd到底是外部还是内部呢,又比如另外一个贴,inherit继承的方法,算外部还是内部呢
dikar 2007-11-26
你的test2方法算是外部方法,不能访问到内部的私有属性
afcn0 2007-11-26
我没那么说,我是说
function test(){
var a=123;
this.test1=function(){alert(a)};
}
test.prototype.test2=function(){alert(a)};
new test().test1();
new test().test2();

我是说既然是私有属性,那么test1 test2同为对象方法,是否都可以得到私有属性呢
dikar 2007-11-26
这个里面的私有属性你不能在类外调用(使用圆点)这里的私有你可以借鉴下JAVA里的私有这个概念。
afcn0 2007-11-26
不对,这个和私有根本毫无关系,也根本不是什么类,只是js当中错巧支持函数链scope保留的一种机制。那私有属性可以通过圆形方法调用吗,也是类的方法,和this没吗区别
dikar 2007-11-26
类中不是用this变量声明的变量或者方法就可以称为私有的
afcn0 2007-11-26
只讲其然,不讲其所以然,这种东西教育效果不好。
发表评论

提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则

您还没有登录,请登录后发表评论

dikar
搜索本博客
存档
最新评论