标签:
两种简单的JavaScript中定义对象的方式:
在JavaScript中,可以动态添加对象的属性,也可以动态删除对象的属性。
1 var object=new object(); 2 //alert(object.username); 3 object["username"]="zhangsan"; 4 alert(object.username); 5 delete object.username; //username已经从object对象中删除 6 alert(object.username);
在JavaScript中定义对象最常用的方式:
1 var object ={username:"zhangsan",password:123};
JavaScript中定义对象的几种方式(JavaScript中没有类的概念,只有对象):
1) 基于已有对象扩充其属性和方法:
1 var object = new Object(); 2 3 object.name = "zhangsan"; 4 object.sayName = function(name) 5 { 6 this.name = name; 7 alert(this.name); 8 } 9 10 object.sayName("lisi");
2)工厂方式:
为了使的一个函数对象被多个对象所共享,而不是每一个对象拥有一个函数对象,应该讲对象的成员函数定义在createObject(username, password)之外来调用,而不是将函数放在工厂方法之内。
1 //使用工厂方法创建对象 2 function get() 3 { 4 alert(this.username + ", " + this.password); 5 } 6 7 function createObject(username, password) 8 { 9 var object = new Object(); 10 11 object.username = username; 12 object.password = password; 13 14 object.get = get; 15 16 return object; 17 } 18 19 var object = createObject("zhangsan", "123"); 20 var object2 = createObject("lisi", "456"); 21 22 object.get(); 23 object2.get();
3) 构造函数方式:
1 function Person() 2 { 3 //在执行第一行代码前,js引擎会为我们生成一个对象 4 this.username = "zhangsan"; 5 this.password = "123"; 6 7 this.getInfo = function() 8 { 9 alert(this.username + ", " + this.password); 10 } 11 12 //此处有一个隐藏的return语句,用于将之前生成的对象返回 13 } 14 15 var person = new Person(); 16 person.getInfo();
可以在构造对象时传递参数
1 function Person(username, password) 2 { 3 this.username = username; 4 this.password = password; 5 6 this.getInfo = function() 7 { 8 alert(this.username + ", " + this.password); 9 } 10 } 11 12 var person = new Person("zhangsan", "123"); 13 person.getInfo();
4)原型(“prototype”)方式:
单纯的使用原型方式来创建对象,那么生成的所有对象会共享原型中的属性,这样一个对象改变了该属性也会反应到其他对象当中。同时,对象无法在构造函数中为属性赋初值,只能在对象生成后再去改变属性值。
1 function Person() 2 { 3 4 } 5 6 Person.prototype.username = new Array(); 7 Person.prototype.password = "123"; 8 9 Person.prototype.getInfo = function() 10 { 11 alert(this.username + ", " + this.password); 12 } 13 14 var person = new Person(); 15 var person2 = new Person(); 16 17 person.username.push("zhangsan"); 18 person.username.push("lisi"); 19 person.password = "456"; 20 21 person.getInfo(); 22 person2.getInfo();
使用原型+构造函数方式来定义对象则可以解决这些问题:
1 //使用原型+构造函数方式来定义对象 2 3 function Person() 4 { 5 this.username = new Array(); 6 this.password = "123"; 7 } 8 9 Person.prototype.getInfo = function() 10 { 11 alert(this.username + ", " + this.password); 12 } 13 14 var p = new Person(); 15 var p2 = new Person(); 16 17 p.username.push("zhangsan"); 18 p2.username.push("lisi"); 19 20 p.getInfo(); 21 p2.getInfo();
5) 动态原型方式:在构造函数中通过标志量让所有对象共享一个方法,而每个对象拥有自己的属性。
1 function Person() 2 { 3 this.username = "zhangsan"; 4 this.password = "123"; 5 6 if(typeof Person.flag == "undefined") 7 { 8 alert("invoked"); 9 10 Person.prototype.getInfo = function() 11 { 12 alert(this.username + ", " + this.password); 13 } 14 15 Person.flag = true; 16 } 17 } 18 19 var p = new Person(); 20 var p2 = new Person();
标签:
原文地址:http://www.cnblogs.com/daneres/p/4787524.html