JS课程学习之创建对象的几种方式

99 阅读2分钟

创建对象的几种方式

对象字面量

var person = {
    name:"Nicholas",
    age:29,
    job:"Software Engineer",

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

上述代码创建了一个名为person的对象,并为它添加了三个属性(name、age、和job)和一个方法(sayName())。sayName()方法用于显示this.name的值,(这个值会被解析为person.name)

Object构造器

var person = new Object();
person.name = "Nicholas";
person.age = 29;
person.job = "SoftWare Engineer";

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

虽然使用Object构造函数或对象字面量都可以用来创建单个对象,但这两种方式的共同缺点是:使用同一个接口创建很多对象,会产生大量的重复代码。

工厂模式

工厂模式实现了:把实现同一事情的相同代码,放到一个函数中。以后如果再想实现这个功能,就不需要重新编写这些代码了,只要执行当前的函数即可。解决了创建多个相似对象的问题。

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

var person1 = createPerson("Nicholas",29,"softWare Engineer");
var person2 = createPerson("Greg",27,"Doctor");

工厂模式使用函数来封装以特定接口创建对象的细节。
但是没有解决对象识别的问题,即怎样知道一个对象的类型。

构造函数

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("Gerg",27,"Doctor");

与工厂模式相比:
1.没有显示地创建对象;
2.直接讲属性和方法赋值给了this对象;
3.没有return语句。
此外,要创建person的新实例,必须使用new操作符。相当于用这种方式调用了构造函数。

此外,还有原型模式,组合使用构造函数模式和原型模式,动态原型模式,寄生购造函数模式,稳妥购造函数模式等。暂且不表。