一、通过new Object()创建对象。
var obj = new Object();
obj.name = "王者";
obj.age = 18;
obj.sex = "男";
obj.eat = function() {
console.log("午饭要吃啥!");
}
console.log(obj);
二、通过对象字面量创建对象。
var obj = {
name: "王者",
age: 18,
sex: "男",
eat: function() {
console.log("晚饭要吃啥!");
}
};
console.log(obj);
obj.eat();
以上两种方式,适合创建单个对象,如果要创建多个类似的对象,可以采用第三种方式创建。
三、通过工厂模式创建对象。
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);
虽然使用工厂模式可以解决创建多个相似对象的问题,但是存在一个问题,我们无法知道对象具体的类型。
四、通过构造函数创建对象。
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();
使用构造函数来创建对象,解决了对象识别的问题,但是也有缺点:每个方法都要在每个实例上重新创建一遍,造成了不必要的资源浪费。
五、通过原型创建对象。
两种方式实现
方式一:
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();
使用原型创建对象,可以让所有的实例对象共享它所包含的属性和方法,不必在构造函数中定义对象实例信息,而是可以将这些信息直接添加到原型对象中。但也有缺点:无法传参。
六、通过构造函数+原型创建对象。
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();
此方式创建对象,我们将不共享的属性放在构造函数中,需要共享的属性或方法放在原型中,解决了传参和数据共享的问题。该方法也是使用最广泛的一种创建自定义对象的方式。
以上是自己总结的JS创建对象的一些常用方式,若有不当之处,请指教!