静态成员js

1、实现类的公有成员:javascript

1)       定义的成员属性和方法可以被任何实例访问,对任何的实例都是公开的,成为公有成员。在javascript中,通常的属性和方法的定义都是公有的,请看下面的例子:function class1(){java

this.prop=1;app

this.showProp();框架

}函数


//建立一个类的实例this

var obj1=new class1();prototype

class1.prototype.showProp=function(){对象

    alert(this.prop);事件

}ip

2)       以上class1中的属性,方法都是公共的,属于任何实例对象。

2、实现类的私有成员:

1)       私有成员便是在内部实现中能够共享的成员,可是并不对外公开。Javascript中并无特殊的机制来实现私有成员,可是能够用一些技巧来实现这个功能。

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

3)       在类的构造函数中能够为类添加成员,经过这种方式来定义类的成员,实际上共享了构造函数内部定义的局部变量,这些变量就能够看做为类的私有成员,例如:

function class1(){

    var pp=”this is a private property”; //私有属性成员pp,

    function pm(){                         //私有方法成员,显示pp的值

    alert(pp);

}

this.method1=function(){

    //在公有成员中改变私有属性的值

    pp=”pp has bean changed”;

}

this.method2=function(){

    pm();         //在公有成员中调用私有方法。

}

}

var obj1=new class1();

obj1.method1();

obj2.method2();

4)       这样,就实现了私有属性pp和私有方法pm。运行完class1之后,尽管看上去pp和pm这些局部变量应该随即消失,但实际上由于class1是经过new来运行的,它所属的对象尚未消失,因此仍然能够经过公开成员来对他们进行操做。

5)       要使用私有成员,是以牺牲代码的可读性为代价的。并且这种实现更多的是同样Javascript技巧,看上去也比较勉强,由于它并非语言自己具备的机制。但种利用变量做用域性质的技巧,倒是值得借鉴的。

3、实现类的静态成员:

1)       和私有成员的勉强相比,静态成员显得“正统”的多。静态成员属于一个类的成员,它能够经过“类名.静态成员名”的方式访问。在javascript中,能够给一个函数对象直接添加成员实现静态成员,由于函数也是一个对象,因此对象的相关操做,对函数一样适用。例如:

function class1(){//构造函数

}

//静态属性

class1.staticProperty=”sample”;

//静态方法

class1.staticMethod=function(){

    alert(class1.staticProperty);

}

//调用静态方法

class1.staticMethod();

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

3)       若是要给每一个函数对象对添加通用的静态方法,还能够经过函数对象所对应的类function来实现,例如:

//给类Function添加原型方法:showArgsCount

Function.prototype.showArgsCount=function(){

    alert(this.length); //显示函数定义的形参的个数

}

function class1(a){

    //定义一个类

}

//调用经过Function的property定义的类的静态方法showArgsCount

class1.showArgsCount();

4)       因而可知,经过Function的property原型对象,能够给任何函数都加上通用的静态成员,这在实际中可起到很大的做用,好比在著名的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){

    _mehtod.call(object,event||window.event);

}

}

相关文章
相关标签/搜索