Discuss
/
JavaScript
/
关于装饰器
关于装饰器
Topic source这里用null的原因前面说到过了,对于普通函数调用,我们通常把`this`绑定 `null`,parseInt()就是一个普通函数并不是方法。
我不能理解的是为啥要用apply调用oldParseInt()?直接return oldParseInt(arguments)也完全没有任何问题啊,功能也能实现。
相比使用return oldParseInt(arguments),还是依赖于传统的对象主动调用 方法,而使用apply则将调用方法的主动权交给该方法,同时具体执行该方法的对象可以视传入的形参决定,增加了代码的复用性,同时也松耦合了。
- 1
象橼科技
理解
利用apply()能改变函数的指向这一特性,在不修改源码的基础上实现功能的扩展
0.var oldParseInt = parseInt; 保存原函数 因为要重写parseInt函数 如果不保存原函数直接在里面使用parseInt会造成无限调用我自己
1.window.parseInt = function () {...}; 重写parseInt函数
2.count += 1; 在重写的函数内部实现的功能扩展
3.return oldParseInt.apply(null, arguments); 返回原函数调用结果
4.`apply`方法,它接收两个参数,第一个参数就是需要绑定的`this`变量,第二个参数是`Array`,表示函数本身的参数。
5.这里的arguments就是重写后的函数的参数 把重写后的函数的参数给了oldParseInt作为oldParseInt的参数
6.null是指需要绑定的`this`变量 这里写的是null 因为parseInt是window的方法 所以也可以写window
所以为什么可以用null代替window? 不是很理解