对于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定义的变量和方法