91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

apply()和call()函數怎么在JavaScript中使用

發布時間:2021-04-01 17:11:08 來源:億速云 閱讀:118 作者:Leah 欄目:web開發

apply()和call()函數怎么在JavaScript中使用?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

JavaScript的函數是對象,因此有屬性和方法。每個函數都包含兩個屬性:length和prototype,每個函數都包含兩個非繼承而來的方法:apply()call()

今天先來介紹一下前端面試中經常問到的apply()call()的區別吧!

這兩個方法的作用是在函數調用時改變函數的執行上下文,也就是函數內的this,apply()方法接收兩個參數,一個是在其中運行函數的作用域,另一個可以是arguments對象,也可以是參數數組。

call()方法與apply()方法的作用相同,它們的區別僅在于接收參數的方式不同,第一個參數不變,變化的是其余參數都直接傳遞給函數,也就是說,傳遞給函數的參數必須逐個列舉出來。

JavaScript的參數在內部就是用一個數組來表示的,從這個意義上來說,apply比call的使用率更高,不必關心具體有多少個參數被傳入函數,只要用apply一股腦傳進去即可。若明確知道函數接收幾個參數,且想一目了然地表達形參與實參的對應關系,可以使用call。

當使用call或apply時,若傳入的第一個參數是null,函數體內的this會指向默認的宿主對象,在瀏覽器中是window,但在嚴格模式下,函數體內的this還是為null。有時,使用call或apply的目的不在于指定this指向,而是另有用途,如借用其他對象的方法,則此時可以傳入null來替代某個具體的對象,如Math.max.apply(null, [1,5,2,4,3]]);

下面來舉個例子:

function sum(num1, num2) {
  return num1 + num2;
}
function applyFunc1(num1, num2) {
  return sum.apply(this, arguments);
}
function applyFunc2(num1, num2) {
  return sum.apply(this, [num1, num2]);
}
function callFunc(num1, num2) {
  return sum.call(this, num1, num2);
}
alert(applyFunc1(10, 20));//輸出:30
alert(applyFunc2(10, 20));//輸出:30
alert(callFunc(10, 20));//輸出:30

JS中的函數其實是對象,函數名是對Function對象的引用。

function add(a,b) {
  alert(a+b);
}
function sub(a,b) {
  alert(a-b);
}
add.call(sub,3,1); //輸出:30

如果你認為apply()call()的作用在于傳遞參數,那就錯了,它們真正強大的地方在于能夠擴充函數賴以運行的作用域。

call和apply的用途:

(1)改變this的指向。

call和apply最常見的用途是改變函數內部的this指向。如上述例子所示。

(2)借用其他對象的方法。

1)借用方法的第一種場景是借用其他對象的構造函數。

var Student = function(name) {
  this.name = name;
};
var Teacher = function(name) {
  Student.apply(this,arguments);
};
Teacher.prototype.getName = function() {
  return this.name;
};
var teacher = new Teacher("Alice");
console.log(teacher.getName()); // 輸出:Alice

2)借用方法的第二種場景是借用其他對象的方法。

當運行showColor.call(obj)時,函數的執行環境就進到了對象中。

window.color = "white";
var obj = {color: "black"};
function showColor() {
  alert(this.color);
}
showColor();//輸出:"white"
showColor.call(this);//輸出:"white"
showColor.call(window);//輸出:"white"
showColor.call(obj);//輸出:"black"

不需要把showColor()函數放到對象obj中,再通過obj來調用。

window.color = "white";
var obj = {color : "black"};
function showColor() {
  alert(this.color);
}
showColor();//輸出:"white"
obj.showColor = showColor;
obj.showColor();//輸出:"black"

看完上述內容,你們掌握apply()和call()函數怎么在JavaScript中使用的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

怀来县| 阜城县| 上饶县| 甘孜| 巴青县| 左权县| 潞城市| 敦煌市| 华阴市| 县级市| 新乐市| 沙坪坝区| 金门县| 敦煌市| 瓦房店市| 黎平县| 临城县| 洛浦县| 九台市| 日照市| 关岭| 灵丘县| 磐石市| 芦溪县| 鹤庆县| 迁安市| 房产| 乐都县| 双鸭山市| 东乌珠穆沁旗| 彭州市| 邓州市| 神池县| 仁寿县| 天长市| 临西县| 凭祥市| 庆安县| 子长县| 黄浦区| 小金县|