这里的 beforefn.apply(this,arguments); this 改为 window或null可以吗?function a() {console.log('self');
}var obj = {name:'li',getName: function() { console.log(this.name);
}
}Function.prototype.before = function(beforeFn) {var __self = this;return function() {
beforeFn.apply(this,arguments);
__self.apply(this,arguments)
}
}var b = a.before(obj.getName);b();如果我想 通过a.before执行obj.getName 得到 'li' 这个值,如何处理这套程序?现在这套before程序执行结果,无法获得obj.name的值
1 回答
忽然笑
TA贡献1806条经验 获得超5个赞
不行,this
需要根据执行的宿主确定,有可能是windows
,也有可能是某个对象。
var funcA = function() { console.log('a'); };var funB = function() { console.log(this.b) };var b = '我是window中的b';var objB = {b: '我是objB中的b'};var test1 = funcA.before(funB); test1(); // 输出`我是window中的b`, 因为这个时候this指向的是windowsobjB.test1 = test1; objB.test1(); // 输出`我是objB中的b`, 因为这个时候this指向的是objB
如果按照你说的将this
改为window
,那么this
将永远指向window
,objB.test1()
得到的结果将是我是window中的b
,this
就被劫持了。
后面的需求,动态设置this
指向
var b = a.before(obj.getName).bind(obj);b();
添加回答
举报
0/150
提交
取消