日期:2014-05-16  浏览次数:20371 次

javascript 类、对象、私有成员、公有成员概念初解
   对于javascript来说,它也有类和对象的之说,任何一个function都可以说是类,有类当然也就有构造函数,利用构造函数new出来的自然就是对象了。
   类有private和public成员,private成员只能在类的作用域可以访问。对象的成员都是public公共成员,任何函数都可以访问和修改。这说起来都有点儿抽象,下面就来看看实例进而对私有成员变量、公有成员变量、类、对象几个概念进行解释:

function Container(param) {
	this.member = param;		//public
	var secret = 3;			//private 
	
	function testPrivateMethod() {     //private method
		alert('private method!');
	}
	
	this.objectMethod = function testPublicObjectMethod(){  //public method
		alert('this is a public Object method !');
	};
}

上面这段代码,我们给出了一个function,这个函数声明了一个私有变量secret、public变量member、私有方法 testPrivateMethod、public方法objectMethod ,在Container 作用域里面,任何函数都可以访问私有变量,secret,但是在Container 外就不能访问了,不信就试试吧!当然如果要直接访问public成员member、和objectMethod 也是不可访问的,但是呢我们可以通过对象来访问,如下:
function testObject(param) {
	//alert(member);	//member is not defined,直接在外部访问,就算是public变量也是不可见的,必须通过变量来访问
	var myContainer = new Container(param);
	alert(myContainer.member);  
//	myContainer.member = 'ccccc';               //通过对象修改public成员变量
//	alert(myContainer.member);
	myContainer.objectMethod();		//this定义的方法可见,var定义的方法不可见
}


总结:
1、function即时类,可以有private、public成员变量(包括变量和方法);
2、对象是通过类new出来的,对象的成员变量都是类的public成员变量;
3、访问权限而言,在function内,private和public变量可以被任意访问,但是在定义变量的外部,私有变量不能被访问,public成员变量也不能直接被访问,要访问必须通过对象访问。


    最后补充下如何添加实例对象的成员,有两种办法:
一、种是利用构造器的this变量来向对象添加成员,这个上面代码已经有就不在演示。
二、利用原型,即对象构造器的prototype来添加公共方法。
Container.prototype.testPrototype = function() {
	alert("this is a public method from prototype!");
};


对象能访问的也就是this定义的变量、方法,以及prototype定义的变量和方法