Javascript中公有成员,私有成员,静态成员

原创 2007年09月21日 16:18:00

Javascript中公有成员,私有成员,静态成员

 

一、实现类的公有成员:

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

this.prop=1;

this.showProp();

}

 

//创建一个类的实例

var obj1=new class1();

class1.prototype.showProp=function(){

    alert(this.prop);

}

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

二、实现类的私有成员:

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以后,尽管看上去pppm这些局部变量应该随即消失,但实际上因为class1是通过new来运行的,它所属的对象还没有消失,所以仍然可以通过公开成员来对他们进行操作。

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

三、实现类的静态成员:

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){

    //定义一个类

}

//调用通过Functionproperty定义的类的静态方法showArgsCount

class1.showArgsCount();

4)       由此可见,通过Functionproperty原型对象,可以给任何函数都加上通用的静态成员,这在实际中可起到很大的作用,比如在著名的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);

}

}

 

公有、私有和受保护成员的特点

公有、私有和受保护成员的特点 公有 @public :公有成员能被继承,也可以被外部函数访问。 私有 @private :私有成员不能被继承,也不能被外部函数访问。 受保护 @protect  :受保...
  • xiyouiOS
  • xiyouiOS
  • 2015年10月18日 12:12
  • 1291

Python类的私有成员

#!/usr/bin/env python #-*- coding:utf8 -*- """ Python中类的成员函数、成员变量默认都是公开的(public), 而且Python中没有类似p...
  • ajaxuser
  • ajaxuser
  • 2012年07月25日 20:21
  • 3178

JavaScript中的公有成员,私有成员和静态成员

JavaScript中的公有成员,私有成员和静态成员 私有成员就是在类的内部实现中可以共享的成员。但是并不对外公开,JavaScript中并没有特殊的机制来定义私有成员,但是可以用一些技巧来实现这个...
  • paopaohuiiz
  • paopaohuiiz
  • 2013年12月19日 11:19
  • 776

关于继承中(静态方法+私有方法)的覆盖与重写问题

关于继承中(静态方法+私有方法)的覆盖与重写问题
  • qq_38986609
  • qq_38986609
  • 2017年11月22日 22:35
  • 65

c++中对类中私有成员中的静态变量初始化

1.static成员的所有者是类本身和对象,但是多有对象拥有一样的静态成员。从而在定义对象时不能通过构造函数对其进行初始化。 2.静态成员不能在类定义里边初始化,只能在class body外初始化。 ...
  • dang_wang
  • dang_wang
  • 2014年07月04日 21:23
  • 3374

JavaScript类的三种成员

  实现类的公有成员  前面定义的任何类成员都属于公有成员的范畴,该类的任何实例都对外公开这些属性和方法。  实现类的私有成员  私有成员即在类的内部实现中可以共享的成员,不对外公开。JavaScri...
  • Leem
  • Leem
  • 2006年11月21日 17:33
  • 1306

js oop中的公有成员、私有成员和静态成员

实现类的公有成员前面定义的任何类成员都属于公有成员的范畴,该类的任何实例都对外公开这些属性和方法。实现类的私有成员私有成员即在类的内部实现中可以共享的成员,不对外公开。JavaScript中并没有特殊...
  • xychen2008
  • xychen2008
  • 2007年04月24日 19:41
  • 798

js构造函数的静态成员和实例成员

js构造函数的静态成员和实例成员 实例对象的原型链 构造函数的原型链
  • songlf521
  • songlf521
  • 2017年03月03日 18:05
  • 693

基础知识-私有静态成员变量

#include "stdafx.h"#include "iostream.h"class A{public: int sumShow;//sumShow是成员变量 A(){};    int fun...
  • kay_1010
  • kay_1010
  • 2010年09月19日 09:05
  • 6830

C++ 私有成员

类的成员默认为私有,私有成员不能被对象直接访问,只能通过在类中设定的接口函数来访问。在类中设置一个公有的借口函数,类的对象通过接口函数才能访问这个成员。     为什么要这么麻烦地设置私有数据成员,然...
  • moli1949
  • moli1949
  • 2015年11月30日 16:50
  • 595
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Javascript中公有成员,私有成员,静态成员
举报原因:
原因补充:

(最多只允许输入30个字)