JavaScript学习之--Javascript类对象
一,对象定义
ECMAScript-262把对象定义为:属性的无序集合,每个属性存放一个原始值、对象或函数。严格来说,对象是无特定顺序的值的数组。每个对象都由类定义,类不仅要定义对象的接口,还要定义对象的内部工作。编译器和解释程序都根据类的说明构建对象。对象是类的实例,由类创建对象的过程叫实例化。JS中对象定义存放在一个函数---构造函数中,构造函数不是一种特殊函数,它只不过是用于创建对象的常规函数。
二,对象声明,实例化,销毁,对象绑定
对象实例化:var obj = new Object(); <==> var obj = new Object; //无参数时括号可以省略。
对象销毁:var obj = new Object; obj = null;//使对象指向null。
绑定:把对象的接口与对象实例结合在一起的方法。
早绑定:在实例化对象之前定义它的特性和方法,这样编译器或解释器就能提前转换机器代码,这种机制在强类型语言中使用。JavaScript是弱类型语言,所次支持早绑定。
晚绑定:在编译器或解释器运行前,不知道对象的类型,使用晚绑定,无需检查对象的类型,只要检查对象是否支持特性和方法。
三,对象类型
ECMAScript中所有对象并非同等创建的,可以创建的并使用的对象有三种。
1,本地对象:ECMAScript定义的类。如Object,Function,Array,String等。
2,内置对象:由ECMAScript提供,独立于宿主环境的所有对象,在ECMAScript程序开始执行时出现。ECMA-a62只定义了两个内置对象:Global和Math(它们也是本地对象)。每个内置对象都是本地对象。
3,宿主对象:由ECMAScript实现的宿主环境提供的对象。如所有BOM和DOM对象。
四,定义类或对象
1,工厂方式
function Factory(){//也可以加参数
var obj = new Object;
obj.color=”red”;
obj.ShowColor=functon(){
alert(this.color);
};
return obj;
}
var test = Factory();
2,构造函数
function Car(sColor){
this.color=sColor;
this.ShowColor=function(){
alert(this.color);
}
}
3,原型方式
function Car(){}
Car.propotype.color=’red’;
Car.propotype.ShowColor=function(){ alert(this.color); }
4,混合构造函数和原型方式
function Car(sColor){
this.color=sColor;
}
Car.propotype.ShowColor=function(){ alert(this.color); }
5,动态原型方式
function Car(sColor){
this.color=sColor;
if(typeof Car.__initialized__ == ‘undefined’){
this.ShowColor=function(){
alert(this.color);
}
Car.__initialized__ ==true;
}
}
6,混合工厂方式
function Factory(){//也可以加参数
var obj = new Object;
obj.color=”red”;
obj.ShowColor=functon(){
alert(this.color);
};
return obj;
}
var test = new Factory(); //实例化时加new 通常这个new会被忽略。
当然这几种方式也可以混合使用。