1.实现一个订阅发布
// function Sub(){
// this.listener={};
// };
// Sub.prototype.on=function(name,fn){
// !this.listener[name]&&(this.listener[name]=fn);
// };
// Sub.prototype.emit=function(name,...arg){
// this.listener[name]&&this.listener[name].apply(window,arg);
// };
// Sub.prototype.off=function(name){
// delete this.listener[name];
// }
class Sub{
constructor(){
this.listener={};
}
on(name,fn){
!this.listener[name]&&(this.listener[name]=fn);
}
emit(name,...arg){
this.listener[name]&&this.listener[name].apply(window,arg);
}
off(name){
delete this.listener[name];
}
}
let sub=new Sub();
sub.on("custom",function(...arg){
console.log(arg[0]+arg[1])
});
sub.emit("custom","我们","大家好");
2.实现add(1)(2)(3)(4,5).sum()的累加
function add(...arg){
let num=0;
function temp(...arg){
num+=arg.reduce((total,currentValue)=>total+currentValue);
return temp;
};
temp.sum=function(){
return num+arg.reduce((total,currentValue)=>total+currentValue);
};
return temp;
};
let a=add(1)(2)(3)(4,5).sum();
b=add(1,2)(3)(5,10)(2,10).sum();
console.log(a);//15
console.log(b);//33
3.arr instanceof Array为什么会返回true(假设arr=[])
arr.__proto__.constructor===Array
4.删除2以下的子节点。
let ary = [ { p: 1, c: 2 }, { p: 1, c: 3 }, { p: 1, c: 4 }, { p: 2, c: 5 }, { p: 2, c: 6 }, { p: 3, c: 7 }, { p: 6, c: 8 }, { p: 6, c: 9 } ]; function del(ary, nodeVal) { for (let i = 0; i < ary.length; i++) { let item = ary[i]; if (item.p == nodeVal) { ary.splice(i, 1); i--; del(ary, item.c); } } return ary; } del(ary, 2);
幸好带电脑了,否则就是纸上手写代码啦!!!