今天学到了一个很有意思的模式,很多大佬也把他称为事件委托,在这之前,我只听过和学习过,面向过程编程和面向对象编程,现在又加了一个面向委托。他是一种不同于类的设计模式
事件委托
1.原理
不给每个子节点单独设置事件监听器,而是设置在其父节点上,然后利用冒泡原理设置每个子节点。
用法: 这里不好用一个直接的dom来表现,就用代码来表现了
Task = {
setID: function(ID) {
this.id= ID;
},
outputID: function() {
console.log(this.id);
}
} ;
//让XYZ委托Task
XYZ= Object.create(Task);
XYZ. prepareTask = function(ID, Label) {
this.setID(ID);
this.label = Label;
};
XYZ.outputTaskDetails = function() {
this.outputID();
console.log(this.label)
}
//ABC = Object. create (Task);// ABC ... =...
在这段代码中,Task和XYZ并不是类(或者函数),它们是对象。XYZ通过Object. create(..)创建,它的[[Prototype]]委托了Task对象。
在委托行为中:我们会尽量避免在[[Prototype]]链的不同级别中使用相同的命名,否则就需要使用笨拙并且脆弱的语法来消除引用歧义。这个和类设计模式中恰好相反。
这里运用的this的隐式绑定规则,他会先查找本地XYZ,因为是先绑定到XYZ上,如果没有找到,则会通过Prototype来委托到Task上,这样就可以找到这个方法。因为XYZ委托了Task
互相委托是禁止的,如果这样是进行了无限循环查找,是不允许的。
下面来对比原型和委托的写法方式
这差不多就是我学到的一种新的思想