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();