亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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將永遠指向window,objB.test1()得到的結果將是我是window中的b,this就被劫持了。


后面的需求,動態設置this指向

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


查看完整回答
反對 回復 2018-10-04
  • 1 回答
  • 0 關注
  • 741 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號