1.
//基于已有对象扩充其属性和方法
var object = new Object(); object.name = "zhangsan"; object.sayName = function(name) { this.name = name; alert(this.name); } object.sayName("lisi");
2.
//工厂方式创建对象 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 object = createObject("zhangsan", "123"); var object2 = createObject("lisi", "456"); object.get(); object2.get();
3.
//构造函数方式
function Person() { //在执行第一行代码前,js引擎会为我们生成一个对象 this.username = "zhangsan"; this.password = "123"; this.getInfo = function() { alert(this.username + ", " + this.password); } //此处有一个隐藏的return语句,用于将之前生成的对象返回 } var person = new Person(); person.getInfo();
4.
//如果使用原型方式对象,那么生成的所有对象会共享原型中的属性, 这样一个对象改变了该属性也会反应到其他对象当中。 Person.prototype.username = new Array(); Person.prototype.password = "123"; Person.prototype.getInfo = function() { alert(this.username + ", " + this.password); } var person = new Person(); var person2 = new Person(); person.username.push("zhangsan"); person.username.push("lisi"); person.password = "456"; person.getInfo(); person2.getInfo();
5.
//使用原型+构造函数方式来定义对象 //使用原型+构造函数方式来定义对象,对象之间的属性互不干扰,各 个对象间共享同一个方法 function Person() { this.username = new Array(); this.password = "123"; } Person.prototype.getInfo = function() { alert(this.username + ", " + this.password); } var p = new Person(); var p2 = new Person(); p.username.push("zhangsan"); p2.username.push("lisi"); p.getInfo(); p2.getInfo();
6.
// 动态原型方式:在构造函数中通过标志量让所有对象共享一个 方法,而每个对象拥有自己的属性。 function Person() { this.username = "zhangsan"; this.password = "123"; if(typeof Person.flag == "undefined") { alert("invoked"); Person.prototype.getInfo = function() { alert(this.username + ", " + this.password); } Person.flag = true; } } var p = new Person(); var p2 = new Person(); p.getInfo(); p2.getInfo();