关闭

[Javascript学习记录]1.对象_创建对象的方法

18人阅读 评论(0) 收藏 举报
分类:
对象可以理解为一个名值对,其中的值可以是数据和函数。有多种方法可以创建对象,最简单的就是创建一个Object实例,再为其添加属性与方法。如同:
var person = new Object();
person.name = "zhangsan";
person.age = "19";
person.job = "student";
person.sayName = function(){
          alert(this.sayName);
};

用对象字面量创建时如下:

var person = {
name : "zhangsan",
age : 19,
job : "student",
sayName : function(){
          alert(this.sayName);
}
<p>};</p>

但是需要创建多个对象时,这种方法会显得过于繁琐,于是有了以下的方法:

1.工厂模式(但是Javascript中无法创建类):抽象了创建具体对象的过程,解决了创建多个相似对象的问题,但是却无法知道一个对象的类型

function createPerson(name,age,job){
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.sayName = function(){
alert(this.sayName);
};
return o;
}

var person1 = createPerson("zhangsan",19,"student");
var person2 = createPerson("lisi",29,"teacher");


2.构造函数模式:创建一个自定义的构造函数,并定义对象类型的属性与方法,创建实例时必须使用new操作符:

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("zhangsan",19,"student");
var person2 = new Person("lisi",29,"teacher");

3.构造函数模式与原型模式的混合:使用最广泛的方法,既可以保留实例的独立属性,又可以共享对方法的引用:

function Person(name,age,job){
     this.name = name;
     this.age = age;
     this.job = job;
     this.friends = ["wanger","zhangwu'];
}

Person.prototype = {
constructor : Person,
sayName : function(){
    alert(this.name);
}
}

var person1 = new Person("zhangsan",19,"student");
var person2 = new Person("lisi",29,"teacher");

person1.friends.push("chengyi");
alert (person1.friends); //"wanger,zhangwu,chengyi"
alert (person2.friends;) //"wanger,zhangwu"
alert (person1.sayName === person2.sayName);  //true
可以看到,对person1添加了新的朋友“chengyi”,但是不会对person2产生影响,而共享的“wanger,zhangwu”则都保留了下来。同时,也可以共享原型中的sayName方法。

此外还有动态原型模式,寄生构造函数模式,稳妥构造函数模式等。不作记录,需要时再查找。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:19次
    • 积分:10
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档