AJAX中JavaScript类的三种成员

2016-02-19 22:13 9 1 收藏

人生本是一个不断学习的过程,在这个过程中,图老师就是你们的好帮手,下面分享的AJAX中JavaScript类的三种成员懂设计的网友们快点来了解吧!

【 tulaoshi.com - Web开发 】

实现类的公有成员

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

  前面定义的任何类成员都属于公有成员的范畴,该类的任何实例都对外公开这些属性和方法。

  实现类的私有成员

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

  私有成员即在类的内部实现中可以共享的成员,不对外公开。JavaScript中并没有特殊的机制来定义私有成员,但可以用一些技巧来实现这个功能。

  这个技巧主要是通过变量的作用域性质来实现的,在JavaScript中,一个函数内部定义的变量称为局部变量,该变量不能够被此函数外的程序所访问,却可以被函数内部定义的嵌套函数所访问。在实现私有成员的过程中,正是利用了这一性质。

  前面提到,在类的构造函数中可以为类添加成员,通过这种方式定义的类成员,实际上共享了在构造函数内部定义的局部变量,这些变量就可以看作类的私有成员,例如:

<script language="JavaScript" type="text/javascript">
<!--
function class1(){
 var pp=" this is a private property"; //私有属性成员pp
 function pm(){ //私有方法成员pm,显示pp的值
  alert(pp);
 }
 this.method1=function(){
  //在公有成员中改变私有属性的值
  pp="pp has been changed";
 }
 this.method2=function(){
  pm(); //在公有成员中调用私有方法
 }
}
var obj1=new class1();
obj1.method1();  //调用公有方法method1
obj1.method2();  //调用公有方法method2
//-->
</script>

显示了运行的结果。

  这样,就实现了私有属性pp和私有方法pm。运行完class1以后,尽管看上去pp和pm这些局部变量应该随即消失,但实际上因为class1是通过new来运行的,它所属的对象还没消失,所以仍然可以通过公开成员来对它们进行操作。

  注意:这些局部变量(私有成员),被所有在构造函数中定义的公有方法所共享,而且仅被在构造函数中定义的公有方法所共享。这意味着,在prototype中定义的类成员将不能访问在构造体中定义的局部变量(私有成员)。

  要使用私有成员,是以牺牲代码可读性为代价的。而且这种实现更多的是一种JavaScript技巧,因为它并不是语言本身具有的机制。但这种利用变量作用域性质的技巧,却是值得借鉴的。

  实现静态成员

  静态成员属于一个类的成员,它可以通过“类名.静态成员名”的方式访问。在JavaScript中,可以给一个函数对象直接添加成员来实现静态成员,因为函数也是一个对象,所以对象的相关操作,对函数同样适用。例如:

function class1(){//构造函数
}
//静态属性
class1.staticProperty="sample";
//静态方法
class1.staticMethod=function(){
 alert(class1.staticProperty);
}
//调用静态方法
class1.staticMethod();

  通过上面的代码,就为类class1添加了一个静态属性和静态方法,并且在静态方法中引用了该类的静态属性。

  如果要给每个函数对象都添加通用的静态方法,还可以通过函数对象所对应的类Function来实现,例如:

//给类Function添加原型方法:show ArgsCount
Function.prototype.showArgsCount=function(){
 alert(this.length); //显示函数定义的形参的个数
}
function class1(a){
 //定义一个类
}
//调用通过Function的prototype定义的类的静态方法showArgsCount
class1. showArgsCount ();

  由此可见,通过Function的prototype原型对象,可以给任何函数都加上通用的静态成员,这在实际开发中可以起到很大的作用,比如在著名的prototype-1.3.1.js框架中,就给所有的函数定义了以下两个方法:

//将函数作为一个对象的方法运行
Function.prototype.bind = function(object) {
 var __method = this;
 return function() {
  __method.apply(object, arguments);
 }
}
//将函数作为事件监听器
Function.prototype.bindAsEventListener = function(object) {
 var __method = this;
 return function(event) {
  __method.call(object, event || window.event);
 }
}

  这两个方法在prototype-1.3.1框架中起了很大的作用,具体含义及用法将在后面章节介绍。

来源:http://www.tulaoshi.com/n/20160219/1627953.html

延伸阅读
指向类成员 作者:Danny Kalev 编译:MTT 工作室 原文出处:Pointing to Class Members 摘要: 本文讲述类成员指针的内部机制以及它的一般使用方法...... 最近我收到许多有关类方法指针的问题,比如:在 VC 中无法使...
标签: Web开发
1、$()可以是$(expresion),即css选择器、Xpath或html元素,也就是通过上述表达式来匹配目标元素。 比如:$("a")构造的这个对象,是用CSS选择器构建了一个jQuery对象——它选择了所有的a/这个标签。如: $("a").click(function(){...}) 就是在点击页面上的任何一个链接时的触发事件。确切地说,就是jQuery用a/这个标签构建了一个对象$("a"),...
标签: Web开发
JavaScript静态成员的定义,只需要在类的构造函数之外,使用类的名称(即:构造函数的函数名称)来定义,如: function MyClass(){} MyClass.staticMethod = staticMethod; function staticMethod(){} JavaScript的静态成员变量的定义类似,如: MyClass.STATIC_VAR = "SHIRDRN"; 下面通过编写一个实例来说明,如下所示: scr...
标签: 游戏动漫
《质量效应3》三种结局 三种体验《质量效应3》三种结局分别为:结局1(红光):摧毁所有的机械生命,结局2(蓝光):控制Reaper,结局3(绿光):融合全银河的有机和机械生命。不同的结局带我们完全不一样的体验。 《质量效应3》三种结局分别为:结局1(红光):摧毁所有的机械生命,结局2(蓝光):控制Reaper,结局3(绿光):融合全...
标签: Web开发
在面向对象的思想中,最核心的概念之一就是类。一个类表示了具有相似性质的一类事物的抽象,通过实例化一个类,可以获得属于该类的一个实例,即对象。 在JavaScript中定义一个类的方法如下: function class1(){ //类成员的定义及构造函数 } 这里class1既是一个函数也是一个类。可以将它理解为类的构造函数,负责初始化工作。...

经验教程

628

收藏

26
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部