const salesOffices = {} // 定义售楼处
salesOffices.clientList = [] // 缓存列表,存放订阅者的回调函数
salesOffices.listen = function(key, fn) {
if (!this.clientList[key]) {
this.clientList[key] = []
this.clientList[key].push(fn) // 订阅的消息添加进缓存列表
salesOffices.trigger = function() {
const key = Array.prototype.shift.call(arguments)
const fns = this.clientList[key]
if (!fns || fns.length === 0) {
// 如果没有订阅该 key 值的函数,则直接返回
for (let i = 0, fn; (fn = fns[i++]); ) {
fn.apply(this, arguments) // (2) //
salesOffices.listen('88', function(price) {
console.info('price ' + price)
salesOffices.trigger('88', 2000000)
salesOffices.trigger('200', 4000000)