JS创建对象的几种常用方式

一、通过new Object()创建对象。

var obj = new Object();
obj.name = "王者";
obj.age = 18;
obj.sex = "男";
obj.eat = function() {
    console.log("午饭要吃啥!");
}
console.log(obj);
运行结果.png

二、通过对象字面量创建对象。

var obj = {
    name: "王者",
    age: 18,
    sex: "男",
    eat: function() {
        console.log("晚饭要吃啥!");
    }
};
console.log(obj);
obj.eat();
运行结果.png

以上两种方式,适合创建单个对象,如果要创建多个类似的对象,可以采用第三种方式创建。

三、通过工厂模式创建对象。

function createObj(name, age, sex) {
    var obj = new Object();
    obj.name = name;
    obj.age = age;
    obj.sex = sex;
    obj.eat = function() {
        console.log("午餐吃糖醋排骨!");
    }
    return obj;
}
var p1 = createObj("丽丽", 20, "女");
var p2 = createObj("明明", 23, "男");
console.log(p1);
console.log(p2);
运行结果.png

虽然使用工厂模式可以解决创建多个相似对象的问题,但是存在一个问题,我们无法知道对象具体的类型。

四、通过构造函数创建对象。

function Person(name, age, sex) {
    this.name = name;
    this.age = age;
    this.sex = sex;
    this.sayHi = function() {
        console.log("大家好,我是" + this.name);
    }
}
var p1 = new Person("丽丽", 18, "女");
p1.sayHi();
运行结果.png

使用构造函数来创建对象,解决了对象识别的问题,但是也有缺点:每个方法都要在每个实例上重新创建一遍,造成了不必要的资源浪费。

五、通过原型创建对象。

两种方式实现

方式一:
function Person() {};
    Person.prototype.name = "丽丽";
    Person.prototype.age = 19;
    Person.prototype.sex = "女";
    Person.prototype.sayHi = function() {
        console.log("大家好,我是" + this.name);
    }
    var p = new Person();
    p.sayHi();

方式二:
function Person() {};
Person.prototype = {
    constructor : Person,
    name: "丽丽",
    age: 19,
    sex: "女",
    sayHi: function() {
        console.log("大家好,我是" + this.name);
    }
}
var p = new Person();
p.sayHi();
运行结果.png

使用原型创建对象,可以让所有的实例对象共享它所包含的属性和方法,不必在构造函数中定义对象实例信息,而是可以将这些信息直接添加到原型对象中。但也有缺点:无法传参。

六、通过构造函数+原型创建对象。

function Person(name, age, sex) {
    this.name = name;
    this.age = age;
    this.sex = sex;
};
Person.prototype.sayHi = function() {
    console.log("大家好,我是" + this.name);
}
var p1 = new Person("小丽", 25, "女");
var p2 = new Person("小华", 30, "男");
p1.sayHi();
p2.sayHi();
运行结果.png

此方式创建对象,我们将不共享的属性放在构造函数中,需要共享的属性或方法放在原型中,解决了传参和数据共享的问题。该方法也是使用最广泛的一种创建自定义对象的方式。
以上是自己总结的JS创建对象的一些常用方式,若有不当之处,请指教!

你可能感兴趣的:(JS创建对象的几种常用方式)