1. 对象字面量
var person = {
name: "Alex",
age: 24,
job: "student",
sayName: function () {
console.log(this.name);
}
}
缺点:创建多个对象时,会产生大量的重复代码。
2. Object
var person = new Object();
person.name = "Alex";
person.age = 24;
person.job = "student";
person.sayName = function () {
console.log(this.name);
}
缺点:创建多个对象时,会产生大量的重复代码。
3. 工厂模式
function createPerson (name, age, job) {
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.sayName = function () {
console.log(this.name)
}
return o;
}
var person = createPerson("Alex", 24, "student");
缺点:无法识别对象的类型。
4. 构造函数模式
function Person(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
this.sayName = function() {
console.log(this.name);
}
}
var person = new Person("Alex", 23, "student");
缺点:每个方法都要在每个实例上创建一遍。
5. 原型模式
function Person() {
Person.prototype.name = "Alex";
Person.prototype.age = 24;
Person.prototype.job = "student";
Person.prototype.sayName = function() {
console.log(this.name);
}
}
var person = new Person();
缺点:每个实例都共享同一组属性和方法。
6. 组合使用构造函数模式和原型模式
function Person(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
}
Person.prototype = {
constructor: Person,
sayName: function () {
console.log(this.name);
}
}
var person = new Person("Alex", 24, "student");
7. 动态原型模式
function Person(name, age, job) {
this.name = name;
this.age = age;
this.job = job
Person.prototype.sayName = function () {
console.log(this.name);
}
}
var person = new Person("Alex", 24, "student");
8. 寄生构造函数模式
function Person (name, age, job) {
var o = new Object();
o.name = name;
o,age = age;
o.job = job;
o.sayName = function () {
console.log(this.name);
}
return o;
}
var person = new Person("Alex", 24, "student");
9. 稳妥构造函数模式
function Person (name, age, job) {
var o = new Object();
o.sayName = function () {
console.log(name);
}
return o;
}
var person = Person("Alex", 24, "student");