<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>创建对象的几种方式</title>
<style>
</style>
</head>
<body>
<script>
//简单创建对象
var person = new Object();
person.name = "nicholas";
person.age = 23;
person.job = "IT";
person.sayName = function(){
alert(this.name);
};
person.sayName();
//字面量
var person = {
name : "nicholas",
age : 23,
job : "IT",
sayName : function(){
alert(this.name);
}
};
person.sayName();// nicholas
//工厂模式
function createPerson(name, age,job){
var o = new Object;
o.name = name;
o.age = age;
o.job = job;
o.sayName = function(){
alert(this.name);
};
return o;
}
person1 = createPerson("nicholas", 20, "IT");
person1.sayName();
person2 = createPerson("blue", 23, "HR");
person2.sayName();
//构造函数模式
function Person(name, age, job){
this.name = name;
this.age = age;
this.job = job;
this.sayName = sayName;
}
function sayName(){
alert(this.name);
}
var person1 = new Person("nicholas", 20, "IT");
person1.sayName();
var person2 = new Person("gred", 22, "HR");
person2.sayName();
//原型模式
function Person(){};
Person.prototype.name = "nicholas";
Person.prototype.age = 20;
Person.prototype.job = "IT";
Person.prototype.sayName = function(){
alert(this.name);
};
var person1 = new Person()
person1.sayName();
var person2 = new Person();
person2.sayName();
alert(person1.sayName == person2.sayName);
//原型模式- 简化
function Person(){};
Person.prototype = {
name : "nicholas",
age : 20,
job : "IT",
sayName : function(){
alert(this.name);
}
};
var person1 = new Person();
person1.sayName();
var person2 = new Person();
person2.sayName();
//组合使用构造模式和原型模式
function Person(name, age, job){
this.name = name;
this.age = age;
this.job = job;
this.friends = ["xiaoming","daming"];
}
Person.prototype = {
constructor : Person,
sayName : function(){
alert(this.name);
}
}
var person1 = new Person("nicholas", 20, "IT");
person1.sayName();//nicholas
person1.friends.push("Van");
alert(person1.friends);//xiaoming,daming,Van
var person2 = new Person("blue", 22, "HR");
person2.sayName();//blue
alert(person2.friends);//xiaoming,daming
//动态原型模式
function Person(name, age, job){
this.name = name;
this.age = age;
this.job = job;
if (typeof this.sayName != "function") {
Person.prototype.sayName = function(){
alert(this.name);
};
}
}
var friends = new Person("nicholas", 20, "IT");
friends.sayName();
//寄生构造函数模式
function Person(name, age, job){
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.sayName = function(){
alert(this.name);
};
return o;
}
var person1 = new Person("nicholas", 20, "IT");
person1.sayName();
//稳妥模式
function Person(name, age, job){
var o = new Object();
o.name = name;
o.sayName = function(){
alert(name);
};
return O;
}
var person1 = new Person("nicholas", 20, "IT");
person1.sayName();
</script>
</body>
</html>
原文:http://iicoo.blog.51cto.com/10739372/1734257