美文网首页
创建对象的几种模式和一个事件管理器实现

创建对象的几种模式和一个事件管理器实现

作者: Carlmac | 来源:发表于2017-03-19 17:30 被阅读0次

构造函数模式、混合模式、模块模式、工厂模式、单例模式、发布订阅模式的范例

构造函数模式

function Person(name) {
  this.name = name;
}

Person.prototype.tellName = function() {
  alert('hello' + this.name);
}

var person = new Person('carl');
person.tellName();   // 'carl'

.

混合模式

function Person(name, gender) {
  this.name = name;
  this.gender = gender;
}
Person.prototype.sayName = function() {
  console.log(this.name);
}

function Coder(name, gender, language) {
  Person.call(this, name, gender);
  this.language = language;
}

Coder.prototype = Object.create(Person.prototype);

Coder.prototype.sayLanguage = function() {
  console.log(this.language);
}

var coder1 = new Coder('carl', 'male', 'JavaScript');
coder1.sayName();        // 'carl'
coder1.sayLanguage();    // 'JavaScript'

.

模块模式

var Person = (function() {
  var name = 'carl';
  function sayName() {
    console.log(name);
  }
  return {
    name: name,
    sayName: sayName
  }
})();

Person.sayName();   // 'carl'

.

工厂模式

function createPerson(name){
  var person = {
    name: name,
    tellName: function(){
      console.log(this.name);
    }
  };
  return person;
};

var person1 = createPerson('carl');
person1.tellName();   // 'carl'

.

单例模式

var Person = (function() {
  var instance;
  function init(name) {
    return {
      name: name
    }
  }
  return {
    createPerson: function(name) {
      if (!instance) {
        instance = init(name);
      }
      return instance;
    }
  }
})();

var person1 = Person.createPerson('carl');
var person2 = Person.createPerson('johnson');

console.log(person1.name);     // 'carl'
console.log(person2.name);     // 'carl'

.

发布订阅模式

var EventCenter = {

  var events = {};

  function on(e, handler) {
    events[e] = events[e] || [];
    events[e].push({
      handler: handler
    });
  }
  
  function fire(e, args) {
    if (!events[e]) return;
    for (var i = 0; i < events[e].length; i++) {
      events[e][i].handler(args);
    }
  }

  function off(e) {
    delete events[e];
  }

  return {
    on: on,
    fire: fire,
    off: off
  }
}

具体实现

function EventCenter() {
  this.events = {};
}

EventCenter.prototype.on = function(eventType, handler) {
  this.events[eventType] = this.events[eventType] || [];
  this.events[eventType].push({
    handler: handler
  });
}

EventCenter.prototype.fire = function () {
  var _args = [].slice.call(arguments);
  var eventType = _args.shift();
  if (!this.events[eventType]) return;
  var handlerArgs = _args;
  for (var i = 0; i < this.events[eventType].length; i++) {
    this.events[eventType][i].handler.apply(this, handlerArgs);
  }
}

EventCenter.prototype.off = function(eventType) {
  delete this.events[eventType];
}

Event.on('change', function(val){
    console.log('change...  now val is ' + val);  
});
Event.fire('change', 'hello');
Event.off('change');


var textInput = document.querySelector('#textIntput');
var btn = document.querySelector('#btn');
var result = document.querySelector('#result');

var Event = new EventCenter();

Event.on('change', function(val) {
  result.innerText = 'change... now value is ' + val;
 });

textInput.addEventListener('keyup', function() {
  Event.fire('change', textInput.value);
});

btn.addEventListener('click', function() {
  Event.off('change');
});

Demo

相关文章

  • 创建对象的几种模式和一个事件管理器实现

    构造函数模式、混合模式、模块模式、工厂模式、单例模式、发布订阅模式的范例 . . . . . 具体实现 Demo[...

  • JAVA中的单例模式

    在java中,单例模式的实现方法有如下几种: 1.饿汉模式 所为饿汉模式,即一开始就创建一个静态的对象,之后该对象...

  • javascript面向对象与原型

    昨天我们讲了在面向对象中创建对象的几种方式 工厂模式 构造函数模式 工厂模式创建的对象,像工厂一样来创建对象,创建...

  • 第六章(2):创建对象

    创建对象的几种模式 工厂模式 构造函数模式 原型模式 我们创建的每一个函数,都有一个prototype属性。这个属...

  • 原型模式-java

    概念: 原型模式:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象。这种模式是实现...

  • iOS设计模式 ─── 对象创建

    对象创建,就是我们在创建对象时可能会用到的设计模式,这边要根据自己的需求去选择。对象创建有以下几种设计模式:① 原...

  • 模式设计之 原型模式

    定义 原型模式:原型模式用于创建重复的对象,实现对象的拷贝。这种模式类似于创建型模式,提供了创建对象的最佳模式。 ...

  • 原型模式及使用案例

    一、模式介绍 原型模式是一种创建型的模式,其核心在于快速复制对象。在Java中创建一个对象的方式有如下几种: 通过...

  • Web40.设计模式

    构造函数模式 混合模式 模块模式 工厂模式 单例模式 发布订阅模式 使用发布订阅模式写一个事件管理器,可以实现如下...

  • 前端设计模式

    工厂模式 构造函数模式 模块模式 混合模式 单例模式 发布订阅模式 使用发布订阅模式写一个事件管理器,可以实现如下...

网友评论

      本文标题:创建对象的几种模式和一个事件管理器实现

      本文链接:https://www.haomeiwen.com/subject/cubmnttx.html