JS中的call()方法和apply()方法用法總結
最近又遇到了JacvaScript
中的call()
方法和apply()方
法,而在某些時候這兩個方法還確實是十分重要的,那麼就讓我總結這兩個方法的使用和區別吧。
1. 每個函式都包含兩個非繼承而來的方法:call()
方法和apply()
方法。
2. 相同點:這兩個方法的作用是一樣的。
都是在特定的作用域中呼叫函式,等於設定函式體內this
物件的值,以擴充函式賴以執行的作用域。
一般來說,this
總是指向呼叫某個方法的物件,但是使用call()
和apply()
方法時,就會改變this
的指向。
call()
方法使用示例:
//例1
<script>
window.color = 'red';
document.color = 'yellow';
var s1 = {color: 'blue' };
function changeColor(){
console.log(this.color);
}
changeColor.call(); //red (預設傳遞引數)
changeColor.call(window); //red
changeColor.call(document); //yellow
changeColor.call(this); //red
changeColor.call(s1); //blue
</script>
//例2
var Pet = {
words : '...',
speak : function (say) {
console.log(say + ''+ this.words)
}
}
Pet.speak('Speak'); // 結果:Speak...
var Dog = {
words:'Wang'
}
//將this的指向改變成了Dog
Pet.speak.call(Dog, 'Speak'); //結果: SpeakWang
apply()
方法使用示例:
//例1
<script>
window.number = 'one';
document.number = 'two';
var s1 = {number: 'three' };
function changeColor(){
console.log(this.number);
}
changeColor.apply(); //one (預設傳參)
changeColor.apply(window); //one
changeColor.apply(document); //two
changeColor.apply(this); //one
changeColor.apply(s1); //three
</script>
//例2
function Pet(words){
this.words = words;
this.speak = function () {
console.log( this.words)
}
}
function Dog(words){
//Pet.call(this, words); //結果: Wang
Pet.apply(this, arguments); //結果: Wang
}
var dog = new Dog('Wang');
dog.speak();
3. 不同點:接收引數的方式不同。
apply()
方法 接收兩個引數,一個是函式執行的作用域(this
),另一個是引數陣列。
語法:apply([thisObj [,argArray] ]);
,呼叫一個物件的一個方法,2另一個物件替換當前物件。
說明:如果argArray
不是一個有效陣列或不是arguments
物件,那麼將導致一個TypeError
,如果沒有提供argArray
和thisObj
任何一個引數,那麼Global
物件將用作thisObj
。
call()
方法 第一個引數和apply()方法的一樣,但是傳遞給函式的引數必須列舉出來。
語法:call([thisObject[,arg1 [,arg2 [,...,argn]]]]);
,應用某一物件的一個方法,用另一個物件替換當前物件。
說明: call
方法可以用來代替另一個物件呼叫一個方法,call
方法可以將一個函式的物件上下文從初始的上下文改變為thisObj
指定的新物件,如果沒有提供thisObj
引數,那麼Global
物件被用於thisObj
。
使用示例1:
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 = 10
console.log(add.apply(s,[5,6])); // 1+2+5+6 = 14
使用示例2:
<script>
window.firstName = "Cynthia";
window.lastName = "_xie";
var myObject = {firstName:'my', lastName:'Object'};
function getName(){
console.log(this.firstName + this.lastName);
}
function getMessage(sex,age){
console.log(this.firstName + this.lastName + " 性別: " + sex + " age: " + age );
}
getName.call(window); // Cynthia_xie
getName.call(myObject); // myObject
getName.apply(window); // Cynthia_xie
getName.apply(myObject);// myObject
getMessage.call(window,"女",21); //Cynthia_xie 性別: 女 age: 21
getMessage.apply(window,["女",21]); // Cynthia_xie 性別: 女 age: 21
getMessage.call(myObject,"未知",22); //myObject 性別: 未知 age: 22
getMessage.apply(myObject,["未知",22]); // myObject 性別: 未知 age: 22
</script>
相關文章
- JS中的call()和apply()方法JSAPP
- 【轉】JS中的call()和apply()方法JSAPP
- JS中apply和call的用法JSAPP
- JavaScript中call,apply,bind方法的總結。JavaScriptAPP
- JavaScript中call,apply,bind方法的總結JavaScriptAPP
- JS中的call、apply、bind方法JSAPP
- 理解JS中的call、apply、bind方法(********************************************************JSAPP
- js中call、apply、bind的用法JSAPP
- js的繼承方法小結(prototype、call、apply)JS繼承APP
- js call,apply,bind總結JSAPP
- 重寫JS中的apply,call,bind,new方法JSAPP
- js中call,apply和bind方法的區別和使用場景JSAPP
- 快速掌握javascript的apply()和call()方法JavaScriptAPP
- js中的call、applyJSAPP
- 徹底理解了call()方法,apply()方法和bind()方法APP
- JS中的call、apply、bindJSAPP
- apply,call,bind的用法APP
- JS中bind、call和apply的作用以及在TS裝飾器中的用法JSAPP
- 簡單快速理解js中的this、call和applyJSAPP
- call()和apply()方法使用程式碼例項APP
- JS學習筆記之call、apply的用法JS筆記APP
- 【譯】理解this及call,apply和bind的用法APP
- JavaScript中的call()和apply()JavaScriptAPP
- JS基礎總結(4)——this指向及call/apply/bindJSAPP
- 使用JS簡單實現一下apply、call和bind方法JSAPP
- JavaScript函式的apply方法與call方法淺析JavaScript函式APP
- javascript中call()、apply()、bind()的用法終於理解JavaScriptAPP
- JavaScript中apply、call、bind的區別與用法JavaScriptAPP
- js中call、apply、bind的區別JSAPP
- 模擬js中的call、apply和bind的實現JSAPP
- casperjs中start方法的使用方法總結JS
- js中call、apply、bind函式JSAPP函式
- 紅寶書總結-this,length,apply,callAPP
- JS中改變this的指向 call、apply 和 bind 的區別JSAPP
- 隨筆——js中的this指向,apply()與 call()JSAPP
- JavaScript中bind、call、apply函式用法詳解JavaScriptAPP函式
- js apply/call/caller/callee/bind使用方法與區別分析JSAPP
- apply call bind的用法與實現APP