创建对象模式

1.工厂模式

这种模式抽象了创建具体对象的过程

function createPerson () {
  var o = new Object();
  o.name = name;
  o.age = age;
  o.job = job;
  o.sayName = function () {
    alert(this.name)
  }
}
var person1 = createPerson('silva', 29, 'IT');

2.构造函数模式

function Person (name, age) {
    this.name = name;
    this.age = age;
    this.say = function () {
        console.log('hello');
    }
}

var p1 = new Person('silva', 26);
var p2 = new Person('jimmy', 29);
// 备注:  要创建Person的新的实例,必须使用new操作符。
// 以这种方式调用构造函数实际上经历以下4个步骤:
// 1.创建一个新的对象
// 2.将构造函数的作用域赋值给新对象(因此this就指向了这个新对象)
// 3.执行构造函数中的代码
// 4.返回新的对象

3.原型模式

function Person () {}

Person.prototype = {
    constructor: Person,
    name: 'silva',
    age: 29,
    sayName: function () {
        console.log(this.name);
    }
}

var person1 = new Person();
person1.sayName();

4.组合使用构造函数模式和原型模式

构造函数模式用于定义实例属性,原型模式用于定义方法和共享属性

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 person1 = new Person('silva', 29, 'IT');

5.动态原型模式

// 把所有信息都封装在构造函数中
function Person (name, age, job) {
    this.name = name;
    this.age = age;
    this.job = job;
    if (typeof this.sayName != 'function') {
        Person.prototype.sayName = function () {
            console.log(this.name);
        }
    }
}
var person1 = new Person('silva', 29, 'IT');

6.寄生构造函数模式

// 这种模式的基本思想是创建一个函数,该函数的作用仅仅是封装创建对象的代码,然后再返回新创建的对象
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 friend = new Person('Mike', 18, 'student');
friend.sayName();

你可能感兴趣的:(创建对象模式)