JS中的call()方法和apply()方法用法总结
1. 每個(gè)函數(shù)都包含兩個(gè)非繼承而來(lái)的方法:call()方法和apply()方法。
2. 相同點(diǎn):這兩個(gè)方法的作用是一樣的。
都是在特定的作用域中調(diào)用函數(shù),等于設(shè)置函數(shù)體內(nèi)this對(duì)象的值,以擴(kuò)充函數(shù)賴以運(yùn)行的作用域。
一般來(lái)說(shuō),this總是指向調(diào)用某個(gè)方法的對(duì)象,但是使用call()和apply()方法時(shí),就會(huì)改變this的指向。
call()方法使用示例:
//例1<script>window.color = 'red';document.color = 'yellow';var s1 = {color: 'blue' };function changeColor(){console.log(this.color);}changeColor.call(); //red (默認(rèn)傳遞參數(shù))changeColor.call(window); //redchangeColor.call(document); //yellowchangeColor.call(this); //redchangeColor.call(s1); //blue</script>//例2var Pet = {words : '...',speak : function (say) {console.log(say + ''+ this.words)}}Pet.speak('Speak'); // 結(jié)果:Speak...var Dog = {words:'Wang'}//將this的指向改變成了DogPet.speak.call(Dog, 'Speak'); //結(jié)果: SpeakWang
apply()方法使用示例:
//例1<script>window.number = 'one';document.number = 'two';var s1 = {number: 'three' };function changeColor(){console.log(this.number);}changeColor.apply(); //one (默認(rèn)傳參)changeColor.apply(window); //onechangeColor.apply(document); //twochangeColor.apply(this); //onechangeColor.apply(s1); //three</script>//例2function Pet(words){this.words = words;this.speak = function () {console.log( this.words)}}function Dog(words){//Pet.call(this, words); //結(jié)果: WangPet.apply(this, arguments); //結(jié)果: Wang }var dog = new Dog('Wang');dog.speak();
3. 不同點(diǎn):接收參數(shù)的方式不同。
- apply()方法?接收兩個(gè)參數(shù),一個(gè)是函數(shù)運(yùn)行的作用域(this),另一個(gè)是參數(shù)數(shù)組。
語(yǔ)法:apply([thisObj [,argArray] ]);,調(diào)用一個(gè)對(duì)象的一個(gè)方法,2另一個(gè)對(duì)象替換當(dāng)前對(duì)象。
說(shuō)明:如果argArray不是一個(gè)有效數(shù)組或不是arguments對(duì)象,那么將導(dǎo)致一個(gè)?
TypeError,如果沒有提供argArray和thisObj任何一個(gè)參數(shù),那么Global對(duì)象將用作thisObj。
- call()方法?第一個(gè)參數(shù)和apply()方法的一樣,但是傳遞給函數(shù)的參數(shù)必須列舉出來(lái)。
語(yǔ)法:call([thisObject[,arg1 [,arg2 [,...,argn]]]]);,應(yīng)用某一對(duì)象的一個(gè)方法,用另一個(gè)對(duì)象替換當(dāng)前對(duì)象。
說(shuō)明:?call方法可以用來(lái)代替另一個(gè)對(duì)象調(diào)用一個(gè)方法,call方法可以將一個(gè)函數(shù)的對(duì)象上下文從初始的上下文改變?yōu)閠hisObj指定的新對(duì)象,如果沒有提供thisObj參數(shù),那么Global對(duì)象被用于thisObj。
使用示例
function add(c,d){return this.a + this.b + c + d;}var s = {a:1, b:2};console.log(add.call(s,3,4)); // 1+2+3+4 = 10console.log(add.apply(s,[5,6])); // 1+2+5+6 = 14
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/sghy/p/7646633.html
總結(jié)
以上是生活随笔為你收集整理的JS中的call()方法和apply()方法用法总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 95汽油多少钱一升啊?
- 下一篇: JS正则表达式学习