您的位置:首页 > Web前端 > JavaScript

JS中对象的建立

2015-10-21 14:07 519 查看

1 工厂模式

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 =Person("Nicholas", 29, "Software Engineer");


2 构造函数模式

function Person(name, age, job){
this.name = name;
this.age = age;
this.job = job;
this.sayName = function(){
alert(this.name);
};
}
创建对象实例

var person1=new Person("Jim",29,"manage");


使用构造函数的主要问题是每个方法都要在每个实例上重新创建一遍

3 原型模式

每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象(原型对象),而这个对象的用途就是包含可以由特定类型的所有实例共享的属性和方法,并且该对象会自动获得constructor属性,constructor属性包含一个指向prototype属性所在函数的指针。

function Person(){
}

Person.prototype.name = "Nicholas";
Person.prototype.age = 29;
Person.prototype.job = "Software Engineer";
Person.prototype.sayName = function(){
alert(this.name);
};
创建对象实例

var person1 = new Person();
person1.sayName();   //"Nicholas"


为减少不必要的输入(Person.prototype),用一个包含所有属性和方法的对象字面量来重写整个原型对象
<pre name="code" class="javascript">function Person(){}
Person.prototype={
name:"Nicholas",
age:29,
job:"Software Engineer",
sayName:function(){
alert(this.name);
}
};



但是该语法本质上完全重写了默认的prototype对象,因此constructor属性也就变成了新对象的constructor属性(指向Object构造函数),不在指向Person函数。可以像下面这样特意将它设置回适当的值

function Person(){
}

Person.prototype = {
constructor : Person,
name : "Nicholas",
age : 29,
job: "Software Engineer",
sayName : function () {
alert(this.name);
}
};
原型中的所有属性是被很多实例共享的,这种共享对函数非常适合,对于包含基本只的属性可以通过在实例上添加一个同名属性改变属性的值,但是对于包含引用类型值(如数组)的属性来说,因为改变一个对象实例的值,其他对象实例的值也随之改变。所以很少有人单独使用原型模式

4 组合使用构造函数模式和原型模式

创建自定义类型的最常见模式,就是组合使用构造函数模式与原型模式。构造函数模式用于定义实例属性,而原型模式用于定义方法和共享的属性。

function Person(name, age, job){
this.name = name;
this.age = age;
this.job = job;
this.friends = ["Shelby", "Court"];
}

Person.prototype = {
constructor: Person,
sayName : function () {
alert(this.name);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: