JavaScript中所有的事物都是对象,对象就是包含一组变量和函数的集合,或者说对象只是带有属性和方法的特殊数据类型。在其它面向对象语言中对象是类的实例化来的,JavaScript其它面向对象的语言不同的是JavaScript是基于原型的面向对象语言,没有类的概念,所有的一切对象都派生自现有对象的一个副本。
JavaScript本身包含很多对象,包括Array、String、Boolean、Number、Mah、Data、RegExp、Global等。除此之外JavaScript还允许自定义对象。
通过JavaScript,我们可以定义并创建自己的对象。创建新对象有两种不同的方法:
1.定义并创建对象的实例使用Object;
2.使用构造函数Function来定义对象,然后创建新的对象实例。
Object方法来创建一个对象以及它的实例:
varperson=new Object(); person.firstname="Bill"; person.lastname="Gates"; person.age=56; person.eyecolor="blue";
实例:
person={firstname:"John",lastname:"Doe",age:50,eyecolor:"blue"};
使用Fucntion构造函数来创造对象以及它的实例
function person(firstname,lastname,age,eyecolor) { this.firstname=firstname; this.lastname=lastname; this.age=age; this.eyecolor=eyecolor; }
使用构造函数创建对象实例
var myFather=newperson("Bill","Gates",56,"blue");
备注:在使用构造函数创造对象时,还有另一种创造对象的方法,但是这种方法在性能上不如上面这种方法,在声明顺序上有严格的要求,使用起来不是很方便,所以不建议使用:
var person=new Function (firstname,this.firstname=firstname;lastname,this.lastname=lastname;age,this.age=age;eyecolor, this.eyecolor=eyecolor; );
Object对象添加静态成员只存在于对象的myObj实例而不存在构造函数中。
var myObj= newObject(); //添加name属性 myObj.name='LD'; //添加alertName方法 myObj.alertName=function(){ alert(this.name); } //执行alertName myObj.alertName();
Function添加静态成员可以存在myObj实例,也可存在构造函数中。
var myObj=newfunction(){ //添加静态属性 myObj.name='LD'; //添加静态方法 myObj.alertName=function(){ alert(this.nam); } } myObj.alertName();
关于上面添加的静态成员,只能应用于myObj这个实例中,不能应用于其它的实例中,否则会报错,这就是静态成员的应用。
能够使实例化的对象包含的方法称为公有成员,需要修改函数的原型,即prototype属性,修改后,任何继承该对象的对象已经存在的所有实例都会立即继承统一的变化。
functionmyConstructor(){ } //添加公有属性 myConstructor.prototype.myName='LD'; //实例化 var myObj=newmyConstructor(); alert(myObj.myName);
由myConstructor实例化的对象可以使用myName,但是myConstructor本身不可以,因为我们把公有成员加到了myConstructor的底层定义中,而非myConstructor实例本身。
私有成员就是在构造函数中定义的变量和函数,这个比较简单只要在构造函数大括号中的属性和方法都算是私有的。
functionmyConstructor(){ //添加私有属性 var myName='Ld'l //添加私有方法 varalertName=function(){ alert('LD'); } alertName();
特权成员与私有成员不同,特权成员能够被公开访问,而且还能访问私有成员,特权成员是指在构造函数的作用域中使用this定义的方法
functionmyConstructor(){ //私有属性 varname='Devin'; // 特权方法 this.alertName=function(){ alert(name); } }
私有成员和特权成员都再函数的内部,他们会被带到函数的每一个实例中,因而将占用大量的内存;公有的原型成员是对象蓝图的一部分,适用于通过new关键字实例化该对象的每一个实例;静态成员只适用于对象的一个特殊实例。