javascript是一种基于原型的面向对象的语言,没有类的概念,主要是function定义的。
js中的继承: student.getName=person.getName
创建构造方法(Function):
function myConstructor(a){ ....... }
等价于:
var myConsturctor=new Function('a',...);
但是最好的写法是第一种。
创建静态方法:
var myObject=new Object();
myObject.name='jh';
myObject.alertName=function(){alert(this.name);}
myObject.alertName();
这段代码通过点运算符直接在Object对象上将name属性和alertName()方法作为静态成员添加到了对象实例中,只存在于对象的一个具体实例,而不存在于构造函数中
var myConstuctor=function(){}
myConstuctor.name='jh';
myConstuctor.alertName=function(){alert(this.name);}
myConstuctor.alertName();
这段代码中myConstuctor既是一个实例也是一个构造函数,但是name和alertName成员不能应用到任何新的实例中。
添加公有方法:
能够使实例化的对象包含的方法称为公有方法。需要修改函数原型,即prototype属性。当修改一个对象的原型时,任何继承该对象的对象也会改变。如:
function myConstructor(message){
this.myMessage=message;
}
//添加公有方法:
myConstructor.prototype.clearMessage=function(string){
this.myMessage+=' '+string;
}
添加私有和特权成员:
function 里面的属性或者方法都是私有的。特权方法是能够被公开访问,而且还能访问私有成员。特权方法是指在构造函数的作用域中使用this关键字定义的方法:
function myConstructor(message){
this.myMessage=message;
var separator='_';
var myOwner=this;
.......
//特权方法
this.appendToMessage=function(string){
this.myMessage+=separator+string;
alertMessage();
}
}
私有和特权成员在函数的内部,在函数的每一个实例中,因而将占用大量的内存。
公有成员存在于通过new关键字实例化该对象的每一个实例。
静态成员只适用于对象的一个特殊实例。
用对象字面量的来定义方法:
function myConstructor(){};
//公有成员
myConstrutor.prototype={
propertyA:'value',
propertyB:'value',
methodA:function(){},
methodB:function(){}
}
(最后一个方法后不要加逗号,否则会报错。)
例如:
myLogger.prototype={
write:function(){},
header:function(){}
}
这就是想myLogger中添加了两个特权方法,write和header