js中call和apply的作用和用法
生活随笔
收集整理的這篇文章主要介紹了
js中call和apply的作用和用法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
call和apply的用途是完全一樣的。改變函數中this的指向:
為什么要改變this的指向呢?這個有什么用?有哪些場景呢?
首先this的指向總是在變的,this的指向是由函數執行時所在的環境決定的,而不是函數聲明時的環境。
this都指向哪里?
1、在控制臺中輸入下面的代碼,此時可以看到this指向a這個對象。
var a={name:'a',getName:function(){return this.name;} } console.info(a.getName());//a?
2、此時this指向了window
window.name= 'window'; var a={name:'a',getName:function(){return this.name;} }var b = a.getName; console.info(b());//window結論:
如果函數是作為一個對象的屬性被調用的(用點的方式調用),此時函數內的this就指向這個對象。
如果是用變量或者名稱的方式直接調用的(不是使用點調用),則指向window。
?
場景:
this的改變:在寫代碼時經常會遇到這種情況,將函數作為回調函數使用時,this的指向變為了window,這個不是我們預期的結果
window.name='window'; var a={name:'a',getName:function(callback){return callback();//funcB使用非對象.的方式調用},funcB:function(){return this.name;} } console.info(a.getName(a.funcB));//window這個時候就可以用call或者apply把this傳遞到callback中,callback中的this的指向就會被傳入的this所替代。
當然,也可以傳入其他對象覆蓋當前this的指向。
window.name='window'; var b={name:'b' }; var a={name:'a',getName:function(callback){return callback.call(b);//傳入b },funcB:function(){return this.name;} } console.info(a.getName(a.funcB));//b也可以借用這個對象的方法。
window.name='window'; var b={name:'b', getBName:function(){return this.name;} }; var a={name:'a',getName:function(callback){return callback.call(b);//傳入b },funcB:function(){return this.getBName();} } console.info(a.getName(a.funcB));//b使用這個功能可以實現類似繼承的效果
var F=function(name){this.name = name; } var S = function(){this.age=arguments[1];F.apply(this,arguments); } S.prototype.getNameAndAge=function(){console.info('名字是'+this.name+'年齡是'+this.age); }var s = new S('小紅','9歲'); s.getNameAndAge();//名字是小紅年齡是9歲?
call和apply的區別:
傳入的參數形式不一樣
call(obj,參數1,參數2);
apply(obj,[參數1,參數2]);
轉載于:https://www.cnblogs.com/panyujun/p/9367911.html
總結
以上是生活随笔為你收集整理的js中call和apply的作用和用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓手机怎么下载历史版本的软件?
- 下一篇: Codeforces.666E.Fore