JS 创建对象

// 1. 原型方式

functionPCar(){

}

PCar.prototype.color="blue";

varpcar1=newPCar();

/*

调用newCar()时,原型的所有属性都被立即赋予要创建的对象,意味着所有的PCar实例存放的是指向

showColor()函数的指针,从语义看起来都属于一个对象,因此解决了前面两种方式存在的问题。此外使用

该方法,还能使用instanceof运算符检查给定变量指向的对象类型。因此下面的代码将输出true:

*/

alert(pcar1instanceofPCar);//output"true"

/*

这个方法看起来不错,遗憾的是,它并不尽人意。

1.首先这个构造函数没有参数。使用原型方式时,不能给构造函数传递参数初始化属性值,因为pcar1和

pcar2的属性都等于"blue"

2.真正的问题出现在属性指向的对象,而不是函数时,函数共享不会造成任何问题,但是对象却是很少被多个

实例共享的。

*/

//2.混合的构造函数/原型方式(推荐)

/*

联合使用构造函数和原型方式,就可像使用其他程序设计语言一样创建对象,这种概念非常简单,即用构造函数

定义对象的所有非函数属性,用原型方式定义对象的函数属性(方法)。

*/

functionhCar(sColor){

this.color=sColor;

this.drivers=newArray('Mike','Sue');

}

hCar.prototype.showColor=function(){

alert(this.color);

}

varhcar1=newhCar('ycolor');

varhcar2=newhCar('rcolor');

hcar1.drivers.push('Matt');

alert(hcar1.drivers);//output"Mike,Sue,Matt"

alert(hcar2.drivers);//output"Mike,Sue"

//3.动态原型方式(推荐)

/*

对于习惯使用其他开发语言的开发者来说,使用混合构造函数/原型方式感觉不那么和谐。批评构造函数/原型方式的人

认为,在构造函数内找属性,在外部找方法的做法不合理。所以他们设计了动态原型方式,以供更友好的编码风格。

动态原型方式的基本想法与混合构造函数/原型方式相同,即在构造函数内定义非函数的属性,而函数的属性则利用

原型属性定义。唯一的区别是赋予对象方法的位置。下面是使用动态原型方法重写的Car类:

*/

functionDCar(sColor){

this.color=sColor;

this.drivers=newArray('Mike','Sue');

if(typeofDCar._initialized=='undefined'){

DCar.prototype.showColor=function(){

alert(this.color);

}

}

DCar._initialized=true;

}

vardcar1=newDCar('ydcar');

vardcar2=newDCar('bdcar');

dcar1.showColor();

dcar2.showColor();

alert(DCar._initialized);//output"true"

alert(dcar1._initialized);//output"undefined"

//4、对象直接量、new创建

创建对象最简单的方法是你的javascript代码中包含对象直接量,也可以通过运算符new创建。

varempty={};//Anobjectwithnoproperties

varpoint={x:0,y:0};

varcircle={x:point.x,y:point.y+1,radius:2};

varhomer={

"name":"HomerSimpson",

"age":34,

"married":true,

"occupation":"plantoperator",

'email':[email protected]

};

vara=newArray();//Createanemptyarray

vard=newDate();//Createanobjectrepresentingthecurrentdateandtime

varr=newRegExp("javascript","i");//Createapattern-matchingobject

创建对象后,我们可以通过"."运算符,在对象中创建新属性、引用已有属性、设置属性值等。

varbook=newObject();  //创建对象

book.title="JavaScript:TheDefinitiveGuide";

book.chapter1=newObject();//作为对象属性的,嵌套对象

book.chapter1.title="IntroductiontoJavaScript";

book.chapter1.pages=11;

book.chapter2={title:"LexicalStructure",pages:6};

alert("Outline:"+book.title+"\n\t"+

"Chapter1"+book.chapter1.title+"\n\t"+

"Chapter2"+book.chapter2.title);//从对象中读取一些属性.

在上例中,需注意,可以通过把一个值赋给对象的一个新属性来创建它.

  在JavaScript语句中提到过用for/in语句可以遍历对象的属性和方法。
删除属性:delete book.chapter2;

相关推荐