题目描述
批量改造Page的原型对象中的方法
所有post开头的方法添加拦截验证功能
当原型链中的check方法返回true时继续执行
否则不执行
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
function checkfy(obj) {
// 遍历所有键
for(var key in obj) {
// 寻找post开头并且是函数的键值
if (key.indexOf('post')==0 && typeof obj[key] == 'function') {
// 此处要使用闭包,虽然我也不知道为什么不用闭包的话只会修改最后一个key。。
(function(key) {
var func = obj[key]
obj[key] = function() {
var check = obj.check()
if (check) {
func.apply(obj, arguments)
}
}
}(key))
}
}
}
你期待的结果是什么?实际看到的错误信息又是什么?
答案代码中修改原型链中的方法是用了for语句然后使用了闭包来修改,我不太明白为什么要使用闭包(自己尝试了去掉匿名函数,发现确实只有最后一个key的方法被修改了),求解答
没有匿名函数,所有的
var func
都是同一个变量,它会被反复覆盖。有匿名函数,才能为每一个 key 建立一个
var func