!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<script>
let House = {
list: {},//存储名单
//订阅
lister: function (key, fn) {
(this.list[key] || (this.list[key] = [])).push(fn);
},
//发布
trigger: function () {
// 获取当前名单中的key值
let key = Array.prototype.shift.call(arguments); // 返回伪数组中的第一个值
let fns = this.list[key];
if (!fns || fns.length === 0) return;
for (var i = 0; i < fns.length; i++) {
let fn = fns[i];
fn.apply(this, arguments);// 调用名单中相应key的方法
}
},
};
let initHouse = function (obj) {
for (var i in House) {
obj[i] = House[i];// 把House对象中的属性和方法赋值给obj
}
};
//测试
let objHouse = {};
initHouse(objHouse);
objHouse.lister("small", function (size) {
console.log("张三要买个小房子" + size + "平米");
});
objHouse.lister("bigger", function (size) {
console.log("李四要买个大房子" + size + "平米");
});
objHouse.trigger("small",100);
objHouse.trigger("bigger",300);
console.log(objHouse.list);
console.log(objHouse.list["small"].toString());
</script>
</body>
</html>
测试结果: