当前位置: 代码迷 >> JavaScript >> javascript中定义对象形式
  详细解决方案

javascript中定义对象形式

热度:228   发布时间:2012-09-02 21:00:34.0
javascript中定义对象方式

1.在javascript中,可以动态添加对象的属性,也可以动态删除对象的属性。

实例:

var obj = new Object();//定义对象的一种方式。

obj["username"] ="wlh";//为对象添加属性的第一种方式

obj.password = "wlh" ; // 为对象添加属性的第二种方式

obj.getName = function(name){

? ?this.name = name;

? ?alert(this.name);?

}?

alert(obj.username);

?alert(obj.password);

obj.getName("wlh");?

其中第一种方式与第二种方式是等价的。

如果想删除该属性,可以使用如下的操作:

delete obj.username;//username属性已经从obj对象中删除。

alert(obj.username);//返回undefined

?

2.定义对象的第二种方式:是最常用的方式。

?

var obj = {username:"wlh",password:"wlh"} ;

alert(obj.username);

?

3.数组对象的定义:

var arr = new Array();//第一种方式

arr.push(1);

?arr.push(2);

?arr.push(3);

var arr = [1,27,2,3]; //第二种方式

arr.sort();//数组排序,默认升序

alert(arr); //结果是1,2,27,3

说明:在javascript数组的sort方法来说,它会先讲待排序的内容转换为字符串(调用toString()方法),按照字符串的前后排序顺序进行排序。

function compare(num1,num2){

? ?var temp1 = parseInt(num1);

?? ?var temp2 = parseInt(num2);

if(temp1 < temp2){

? ?return -1;

} else if(temp1 == temp2){

? return 0;

}else{

? ?return 1;

}

}

arr.sort(compare);//函数名是对象引用

alert(arr);//结果为1,2,3,27

3.匿名函数:

arr.sort(function(num1,num2){

? ? var temp1 = parseInt(num1);

?? ?var temp2 = parseInt(num2);

? ? if(temp1 < temp2){

? ? ? ?return -1;

? ? } else if(temp1 == temp2){

? ? ? ?return 0;

? ? }else{

? ? ? ?return 1;

? ? }

});

4.javascript中定义对象的几种方式(javascript中没有类的概念,只有对象):

1)基于已有对象扩充其属性和方法:

var obj = new Object();

obj.password = "wlh" ;

obj.getName = function( username ){

? ?this.username = username;

? ?alert(this. username);?

}?

alert(obj. username );
obj.getName("wlh");
alert(obj. username );?

结果:

undefined

wlh

wlh

2)工厂方式创建对象 :

//构造函数不传参

function createObject(){

? ? var obj = new Object();

? ? obj.username = "wlh";?

? ? obj.password = "123456";

? ? obj.get = function(){

? ? ? ? ? alert(this.username + "," + this.password);?

? ? }?

? ? return obj;?

}?

//构造函数传参

function createObject2(username,password){

? ? var obj = new Object();

? ? obj.username = username ;?

? ? obj.password = password ;

? ? obj.get = function(){//缺点是耗内存

? ? ? ? ? alert(this.username + "," + this.password);?

? ? }?

? ? return obj;?

}?

var obj1 = createObject();

obj1.get();?

var obj2 = createObject2("wlh","888888");

obj2.get();?

//改进方法:让一个函数对象被多个对象所共享,而不是每个对象拥有一个函数对象。

function get(){

? ? ? alert(this.username + "," + this.password);?

}

function createObject2(username,password){

?

? ? var obj = new Object();

? ? obj.username = username ;?

? ? obj.password = password ;

? ? obj.get = get;

? ? return obj;?

}

var obj2 = createObject2("wlh","888888");

obj2.get();?

?3)构造函数方式:

function Person(){

//执行第一代码前,js引擎会为我们生成一个对象?

? ? ? this.username = "wlh";

? ? ? this.password = "999999";

? ? ? this.getInfo = function(){

? ? ? ? ?alert(this.username + "," + this.password);?

? ? ? } //该处隐含一个return语句,用于返回之前生成对象

}?

?

function Person2(username,password){

//执行第一代码前,js引擎会为我们生成一个对象?

? ? ? this.username = username ;

? ? ? this.password =? password;

? ? ? this.getInfo = function(){

? ? ? ? ? ? alert(this.username + "," + this.password);?

? ? ? } //该处隐含一个return语句,用于返回之前生成对象

}?

var person ?= new ?Person2("wlh","000000");

person.getInfo();?

4)原型(“prototype”)方式?

function Person(){

}

Person.prototype.username = "wlh" ;

Person.prototype.password = "111111";

Person.prototype.getInfo = function(){

? ? ? ?alert(this.username + "," + this.password);?

}?

var person = new Person();

person.getInfo();

person.username= "otherwlh";

person.getInfo();

但是单纯的使用原型方式定义类无法在构造函数中为属性赋初值,只能在对象生成后再去改变属性值。

如果使用原型方式创建对象,那么生成的所有对象会共享原型中的属性,这样一个对象改变了该属性页会反映到其他对象当中。

比如:

?

?

function Person(){

}

?

Person.prototype.username = new Array() ;

Person.prototype.password = "111111";

Person.prototype.getInfo = function(){

? ? ? ?alert(this.username + "," + this.password);?

}?

var person1 = new Person();

var person2 = new Person();

person1.username.push("aaaaaa");

person1.username.push("bbbbbb"); ? //这是对象引用

person1.password = "222222";//因为这是一个常量

person1.getInfo();

?person2.getInfo();

结果:

aaaaaa,bbbbbb,222222

aaaaaa,bbbbbb,111111

可以通过构造函数搭配原型方式创建js对象:

?

function Person(){

this.username = "111111";

this.password = "222222";

}

Person.prototype.getInfo = function(){

? ? ? ?alert(this.username + "," + this.password);?

}?

?

5)动态原型方式创建对象

function Person(){

? ? this.username = "111111";

? ? this.password = "222222";

? ? if(typeof Person.flag == "undefined"){

? ? ? ? ?alert("invoke!");

? ? ? ? ?Person.prototype.getInfo = function(){

? ? ? ? ? ? ? ? alert(this.username + "," +this.password);

? ? ? ? }

? ? ? ? Person.flag = true;

? ?}

}

?

var p = new Person();

var p2 = new Person();

p.getInfo();

p2.getInfo();

  相关解决方案