JS笔记2 --定义对象

it2026-05-03  7

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

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

var object = new Object(); object.name = "zhangsan"; object.sayName = function(name){   this.name = name;   alert(this.name); } object.sayName("lisi");

2)工厂方式:

//工厂方式创建对象 function createObject(){   var object = new Object();   object.username = "zhangsan";   object.password = "123";   object.get = function(){     alert(this.username + ", " + this.password);   }   return object; } var object1 = createObject(); var object2 = createObject(); object1.get(); //带参数的构造方法 function createObject(username,password){   var object = new Object();   object.username = username;   object.password = password;   object.get = function(){     alert(this.username + ", " + this.password);   }   return object; } var object1 = createObject("zhangsan","123"); object1.get(); //让一个函数被多个对象共享,而不是每一个对象拥有一个函数对象 function get(){   alert(this.username + ", " + this.password); } function createObject(username,password){   var object = new Object();   object.username = username;   object.password = password;   object.get = get;   return object; } var object1 = createObject("zhangsan","123"); var object2 = createObject("lisi","456"); object1.get(); object2.get();

3)构造函数方式:

function Person(){   //在执行第一行代码前,js引擎会为我们生成一个对象   object.username = "zhangsan";   object.password = "123";   object.getInfo = function(){     alert(this.username + ", " + this.password);   }   //此处有一个隐藏的return语句,用于将之前生成的对象返回 } var person = new Person(); person.getInfo(); //可以在构造对象时传递参数 function Person(username,password){   //在执行第一行代码前,js引擎会为我们生成一个对象   object.username = username;   object.password = password;   object.getInfo = function(){     alert(this.username + ", " + this.password);   }   //此处有一个隐藏的return语句,用于将之前生成的对象返回 } var person = new Person("zhangsan","123"); person.getInfo();

4)原型 ("prototype")方式:

//使用原型 (prototype)方式创建对象 function Person(){ } Person.prototype.username = "zhangsan"; Person.prototype.password= "123"; Person.prototype.getInfo = function(){   alert(this.username + ", " + this.password); } var person1 = new Person(); var person2 = new Person(); person1.username = "lisi"; person1.getInfo(); person2.getInfo(); // function Person(){ } Person.prototype.username = new Array(); Person.prototype.password= "123"; Person.prototype.getInfo = function(){   alert(this.username + ", " + this.password); } var person1 = new Person(); var person2 = new Person(); person1.username.push("zhangsan"); person1.username.push("lisi"); person1.password= "456"; person1.getInfo(); person2.getInfo(); //使用原型 + 构造函数方式来定义对象 function Person(){   this.username = new Array();   this.password= "123"; } Person.prototype.getInfo = function(){   alert(this.username + ", " + this.password); } var person1 = new Person(); var person2 = new Person(); person1.username.push("zhangsan"); person2.username.push("lisi"); person1.getInfo(); person2.getInfo();

5)动态原型方式:在构造函数中通过标志量让所有对象共享一个方法,而每个对象拥有自己的属性。

function Person(){    this.username = new Array();   this.password= "123";   if(typeof Person.flag == "undefined"){     alert("invoked");       Person.prototype.getInfo = function(){       alert(this.username + ", " + this.password);     }     Person.flag = true;   } } var person1 = new Person(); var person2 = new Person(); person1.getInfo(); person2.getInfo();

 

转载于:https://www.cnblogs.com/zhengsha/p/5086455.html

最新回复(0)