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

对象可以理解为一个名值对,其中的值可以是数据和函数。有多种方法可以创建对象,最简单的就是创建一个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方法。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值