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