原型模式

原型模式是创建型模式的一种,其特点在于通过「复制」一个已经存在的实例来返回新的实例,而不是新建实例。被复制的实例就是我们所称的「原型」,这个原型是可定制的。

原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效;或者创建值相等,只是命名不一样的同类数据。

将构造函数模式中的示例稍作改造,用 prototype 实现成员方法:

  1. function FamilyMember( name, age ) {
  2. this.name = name;
  3. this.age = age;
  4. }
  5. FamilyMember.prototype.introduce = function() {
  6. return 'My name is ' + this.name + '. I\'m ' + this.age + ' years old.';
  7. }

创建两个 FamilyMember() 的实例并用 === 比较 introduce() 方法:

  1. var host = new FamilyMember('Ourai', 18);
  2. var hostess = new FamilyMember('Julia', 17);
  3. console.log(host.introduce()); // "My name is Ourai. I'm 18 years old."
  4. console.log(hostess.introduce()); // "My name is Julia. I'm 17 years old."
  5. console.log(host === hostess); // false
  6. console.log(host.introduce === hostess.introduce); // true

这回两个实例的 introduce() 方法是同一个函数,即构造函数 FamilyMember() 的成员方法是共享的。