为了账号安全,请及时绑定邮箱和手机立即绑定

js 这个aop里的 this 劫持 什么意思

js 这个aop里的 this 劫持 什么意思

隔江千里 2018-09-11 14:11:51
这里的 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将永远指向windowobjB.test1()得到的结果将是我是window中的bthis就被劫持了。


后面的需求,动态设置this指向

var b = a.before(obj.getName).bind(obj);b();


查看完整回答
反对 回复 2018-10-04
  • 1 回答
  • 0 关注
  • 722 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信