Atitit.js this错误指向window的解决方案
Atitit.js?this錯誤指向window的解決方案
?
?
1.1.?出現地點and解決之道1
1.2.?call,apply和bind這三個方法2
1.2.1.?Function.prototype.call2
1.3.?在函數內部出現的this,指什么要看這個this所在的函數的被調用方式。?不論這個this出現在什么樣的函數中,層次有多深,結構多復雜,只要看直接包含它的函數即可。例如:??(1)?被直接調用時,this指全局對象window。3
2.?ref3
?
?
1.1.?出現地點and解決之道
出現地點:::?回調js??methd的時候兒...
解決之道::HRE.exe(mp,this.merge_callback.bind(this));
?
因為:::
?
下面說說我的拙見,如有不對,大神請指出。
先看setTimeout(this.sayHello,?1000);
this.sayHello只是傳了一個函數引用過去,這里的this指的是foo.prototype,因為JS函數塊是作用域,而setTimeout(this.sayHello,?1000);?是在foo.prototype.bar里面。
foo.prototype.bar?=?function(){
setTimeout(this.sayHello,?1000);
}
所以就相當于
setTimeout(function(){
????alert(this.myName);
},?1000);
屬于2、函數調用,this指向window。
?
setTimeout其實是window.setTimeout,setTimeout執行的時候this是指向window
作者::??★(attilax)>>>?綽號:老哇的爪子?(?全名::Attilax?Akbar?Al?Rapanui?阿提拉克斯?阿克巴?阿爾?拉帕努伊?)?漢字名:艾龍,??EMAIL:1466519819@qq.com
轉載請注明來源:?http://www.cnblogs.com/attilax/
?
1.2.?call,apply和bind這三個方法
1.2.1.?Function.prototype.call
fun.call(thisArg[,?arg1[,?arg2[,?...]]])
可以用來指定調用call的函數的this指向(函數體的作用域),在所給定的thisArg(對象)作用域中執行該函數(call的調用者),后面的參數是函數調用過程中需要用到的數據,以逗號分隔的形式給出。
?
?
apply函數與call的使用場景類似,不同的地方是在調用參數部分,直接給出的是參數數組,而不是挨個添加,這對于編碼來講,大有裨益,可以直接把參數處理成數組的形式,傳遞進去,省去不少功夫,也提升了自動化能力
?
與上面不同的是,bind會返回一個改變this指向的新函數?,注意這里強調的是新函數,其與之前的使用的不是同一塊內存地址,
?
?
1.3.?在函數內部出現的this,指什么要看這個this所在的函數的被調用方式。
不論這個this出現在什么樣的函數中,層次有多深,結構多復雜,只要看直接包含它的函數即可。例如:
(1)?被直接調用時,this指全局對象window。
????func();
(2)?被作為構造函數調用時,this指當前正在構建的對象。
????new?func();
(3)?被作為某個對象A的方法調用時,this指方法所屬的對象A。
????A.func();
(4)?使用函數的apply或call方法調用時,this指第一個參數B。
????func.apply(B,?[m,?n,?...]);
????
????func.call(B,?m,?n,?...);
2.?ref
JS中的call、apply、bind方法的區別-日拱一卒-微頭條(wtoutiao.com).htm
(2?封私信???7?條消息)?JS中的this?在不同的地方指向不一樣,在哪些地方需要注意??-?知乎.htm
?
轉載于:https://www.cnblogs.com/attilax/p/5316822.html
總結
以上是生活随笔為你收集整理的Atitit.js this错误指向window的解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转载]用UglifyJS2合并压缩混淆
- 下一篇: 用注册表禁止windows添加新用户