Discuss
/
JavaScript
/
最后一个装饰器例子的疑问?
最后一个装饰器例子的疑问?
Topic sourcevar count = 0; var oldParseInt = parseInt; // 保存原函数 window.parseInt = function () { count += 1; return oldParseInt ; // 调用原函数,改成直接调用oldParseInt }; parseInt('10'); parseInt('20'); parseInt('30'); count; // 3
3
修饰器的例子在chrome测试如上代码 结果正确
为何必须使用apply呢?
在控制台先执行
var b = a;
var a = function() {
console.log("这是旧函数");
}
b() // 这是旧函数
a() // 这是旧函数
然后清空控制台,重新定义a
a = function() {
console.log("这是新的");
}
b() // 这是旧函数
a() // 这是新的
这就是老师说的变量是对象的引用么? b
和 a
都指向了旧的匿名函数, 新赋 a 的那个匿名函数和旧的没有任何关系,所以现在 a
指向了一个新的匿名函数,而 b
还是指向旧函数 ? 不知道理解有没有问题
我的理解是,function是引用类型指向的堆内存中真正的object的引用,假如parseInt指向的是原来的object1,那个付给oldparseInt后,old也指向了object1,重新定义的function实际是object2,那么定义完成后parseInt实际上就指向object2了,所以不会影响之前的object1.
var b = a;
var a = function() {
console.log("这是旧函数");
}
var a = function() {
console.log("这是新函数");
}
b() // 报错.
a() // 这是旧函数
几楼的我忘了,那个楼层的哥们写错了.注意.
- 1
- 2
duzengrass
最后一个装饰器例子中,