JavaScript中创建对象的方式

JavaScript中创建对象的方式有多种,这里只介绍三种:构造函数模式、原型模式、组合使用构造函数模式和原型模式(推荐)

1、构造函数模式

function Person(name, age, job){
    this.name = name;
    this.age = age;
    this.job = job;

    this.sayName = function(){
        alert(this.name);   
    };
}

var person1 = new Person("Nicholas", 29, "software engineer");
var person2 = new Person("Greg", 27, "doctor");
缺点:使用构造函数的问题就是每个方法都要在新创建的实例上重新创建一遍。

2、原型模式

function Person(){}

Person.prototype = {
    constructor : Person,
    name :  "Nicholas",
    age : 29,
    job : "software engineer",
    friends : ["Shelby","Court"],
    sayName : function(){
        alert(this.name);   
    }
};

var person1 = new Person();
var person2 = new Person();

person1.friends.push("Van");

alert(person1.friends); //"Shelby,Court,Van"
alert(person2.friends); //"Shelby,Court,Van"
alert(person1.friends === person2.friends); //true
缺点:使用原型方式的一个突出问题在于如果包含引用类型的属性(Person.friends),那么
某一个对象修改这个属性值,会影响到其它对象。

3、组合使用构造函数模式和原型模式(推荐方式)

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);   
    }
};

var person1 = new Person("Nicholas", 29, "software engineer");
var person2 = new Person("Greg", 27, "doctor");

person1.friends.push("Van");

alert(person1.friends); //"Shelby,Court,Van"
alert(person2.friends); //"Shelby,Court"
alert(person1.friends === person2.friends); //false
alert(person1.sayName === person2.sayName); //true

JS创建对象的方式除了以上三种,还有其它多种方式,请参考文章http://www.cnblogs.com/tiwlin/archive/2009/08/06/1540161.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值