javascript 中公共/私有变量、方法、特权

本文深入探讨了JavaScript中对象的创建、面向对象的成员和方法的访问域,以及基于函数的面向对象编程的概念,包括构造函数、私有变量、私有函数、特权方法、公共属性、公共方法、原型属性、静态属性等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 私有变量 在对象内部使用'var'关键字来声明,而且它只能被私有函数和特权方法访问。
  • 私有函数 在对象的构造函数里声明(或者是通过var functionName=function(){...}来定义),它能被特权函数调用(包括对象的构造函数)和私有函数调用。
  • 特权方法 通过this.methodName=function(){...}来声明而且可能被对象外部的代码调用。它可以使用:this.特权函数() 方式来调用特权函数,使用 :私有函数()方式来调用私有函数。
  • 公共属性 通过this.variableName来定义而且在对象外部是可以读写的。不能被私有函数所调用。
  • 公共方法 通过ClassName.prototype.methodName=function(){...}来定义而且可以从对象外部来调用。
  • 原型属性 通过ClassName.prototype.propertyName=someValue来定义。
  • 静态属性 通过ClassName.propertyName=someValue来定义。

 

首先简单介绍下javascript的对象:在javascript中对象的种类,Object,Function,还有就是内置对象如String,Array,Date等,在 

javascript中内置对象都是继承自Object类。 
对象的创建方式 

Java代码   收藏代码
  1. var obj = new Object(); //传统的对象 内置对象也是这么创建的  
  2.  var obj = {}; //无类型对象  


我们通常使用的函数都是Function类的实例. 即我们可以这样定义一个函数对象 
Java代码   收藏代码
  1. var add = new Function("a","b","return a+b");  

上面的函数对象等同于 
Java代码   收藏代码
  1. function add(a,b){  
  2.   return a+b;  
  3. }  

上面这些是很基本的,如果要了解更深大家可以看javascript的书籍,我就不讲了。 

面说下基于函数的面向对象的 成员和方法的访问域的解释.  
Java代码   收藏代码
  1. //构造函数  
  2.   
  3. function myConstructor(message){  
  4.         //公有属性  
  5.     this.myMessage = message;  
  6.         //私有属性  
  7.     var separator = '_';  
  8.     var myOwner = this;  
  9.     //构造函数内私有方法  
  10.     function alertMessage(){  
  11.         alert(myOwner.myMessage);  
  12.     }  
  13.     alertMessage();  
  14.     //特权方法 可以访问构造函数里的私有变量  
  15.     this.appendToMessage = function(string){  
  16.         this.myMessage += separator + string;  
  17.         alertMessage();  
  18.     }  
  19.   }  
  20.   
  21. //公有方法  
  22.   
  23. myConstructor.prototype.clearMessage = function(str){  
  24.    this.myMessage = "";  
  25. }  
  26.   
  27. //静态成员  
  28. myConstructor.name = "jeff";  
  29.   
  30. //静态方法  
  31. myConstructor.alertName = function (){  
  32.   alert(this.name)  
  33. }  
  34.   
  35. var obj = new myConstructor("hello !");  
  36. obj.appendToMessage("kate");  

这段代码创建了一个构造函数myConstructor,它本身也是一个Function对象的实例。我们在程序中面向对象把它看成构造函数 最后使用的是 myConstructor的实例,javascript中没有类这个概念 ,我们这时候可以把它理解为java中的类 

在构造函数中 
第1行定义了一个特权属性myMessage( 实例对象和子类对象实例可以访问
Java代码   收藏代码
  1. //创建子类  
  2. function sub(message){  
  3.     //继承 myConstructor  
  4.     myConstructor.call(this,message);  
  5. }  
  6. var subObj = new sub("jame");  
  7. alert(subObj.myMessage);  

第2行定义了两个私有的属性( 在私有方法和特权方法内可以访问,在原型的公有方法不能访问) , 
第4行定义了一个私有方法alertMessage,接着在构造函数里调用 
最后定义了appendToMessage特权方法( 实例对象可以访问和子类对象实例也可以访问如下
Java代码   收藏代码
  1. subObj.appendToMessage(" hello");  


接着定义了公有方法clearMessage是扩展了原型对象, 这样的方法适用于所有new出来的实例及子类的实例  

这里需要注意的是 静态成员和静态方法只能当前的实例对象能访问也就是 new myConstructor()的实例对象可以访问,在子类中不允许访问 .调用如下 
Java代码   收藏代码
  1. alert(myConstructor.name); //静态成员  
  2. myConstructor.alertName(); //静态方法  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值