// 什么叫高阶函数 : 1.如果一个函数的参数是一个函数 (回调函数也是一个高阶函数)
// 2.如果一个函数返回一个函数 这个函数就叫高阶函数
// 闭包
// 对某些函数进行扩展 面向切片编程
function say(who) { // 装饰
console.log('say',who)
}
// 在说话之前 去干一些事 在说话之前先刷牙
Function.prototype.before = function (callback) { // 统一扩展了公共方法
// 箭头函数中没有 this 没有arguments
// args 就是当前参数的一个数组 ['我']
return (...args) => { // newSay 箭头函数中没有this指向,会像上级作用域查找。也没有arguments,得自己传参数,
callback();
// 展开运算符 可以将数组展开依次传入
this(...args);// this指向怎么看 就是谁调用这个方法 this就是谁
}
}
let newSay = say.before(function () {
console.log('刷牙');
})
newSay('我');
// 原型链 prototype __proto__