js多個call(js多個參數值轉為數組)

本文目錄一覽:

如何理解和熟練運用js中的call及apply

call和apply

obj.call(thisObj, arg1, arg2, …);

obj.apply(thisObj, [arg1, arg2, …]);

兩者作用一致,都是把obj(即this)綁定到thisObj,這時候thisObj具備了obj的屬性和方法。或者說thisObj『繼承』了obj的屬性和方法。綁定後會立即執行函數。

唯一區別是apply接受的是數組參數,call接受的是連續參數。

function add(j, k){

return j+k;

}

function sub(j, k){

return j-k;

}

我們在控制台運行:

add(5,3); //8

add.call(sub, 5, 3); //8

add.apply(sub, [5, 3]); //8

sub(5, 3); //2

sub.call(add, 5, 3); //2

sub.apply(add, [5, 3]); //2

調用原生對象的方法

示例:

var a = {0:1, 1:”yjc”, length: 2};

a.slice(); //TypeError: a.slice is not a function

Array.prototype.slice.call(a);//[1, “yjc”]

對象a類似array,但不具備array的slice等方法。使用call綁定,這時候就可以調用slice方法。

實現繼承

通過call和apply,我們可以實現對象繼承。示例:

var Parent = function(){

this.name = “yjc”;

this.age = 22;

}

var child = {};

console.log(child);//Object {} ,空對象

Parent.call(child);

console.log(child); //Object {name: “yjc”, age: 22}

以上實現了對象的繼承。

bind的使用

obj.bind(thisObj, arg1, arg2, …);

把obj綁定到thisObj,這時候thisObj具備了obj的屬性和方法。與call和apply不同的是,bind綁定後不會立即執行。

同樣是add()和sub():

add.bind(sub, 5, 3); //不再返回8

add.bind(sub, 5, 3)(); //8

如果bind的第一個參數是null或者undefined,等於將this綁定到全局對象。

在JS中,call()方法和apply()方法到底該怎麼應用?

1.apply與call是更改對象的內部指針,即改變對象的this指向的內容;

2.call與apply的第一個參數都是要傳入給當前對象的對象,及函數內部的this,後面的參數都是傳遞給當前對象的參數。

詳細用法如下:

1.call()

語法:obj1.call(obj2[,param1,param2,…]);

定義:用obj2對象來代替obj1,調用obj1的方法。即將obj1應用到obj2上;

說明:call 方法可以用來代替另一個對象調用一個方法,call 方法可將一個函數的對象上下文從初始的上下文改變為由 obj2 指定的新對象,如果沒有提供 obj2參數,那麼 Global 對象被用作 obj2。

2.apply()

語法:obj1.call(obj2[,arrArg]);

定義:用obj2對象來代替obj1,調用obj1的方法,即將obj1應用到obj2上,

說明:call ()和apply()作用一樣,但是call()可以接收任何類型的參數,而apply()只能接收數組參數。

3.基本用法

4.繼承特性

JS中 call和apply的區別和作用

JavaScript中的每一個function對象都會有call和apply方法

定義:

apply:調用一個對象的一個方法,用另一個對象替換當前對象。例如:B.apply(A, arguments);即A對象應用B對象的方法。

call:調用一個對象的一個方法,用另一個對象替換當前對象。例如:B.call(A, args1,args2);即A對象調用B對象的方法

從定義中可以看出,call和apply都是調用一個對象的一個方法,用另一個對象替換當前對象。而不同之處在於傳遞的參數,apply最多只能有兩個參數——新this對象和一個數組argArray,如果arg不是數組則會報錯TypeError;

call則可以傳遞多個參數,第一個參數和apply一樣,是用來替換的對象,後邊是參數列表。

請教一個js函數裡面的call方法

親,call方法:

語法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])

定義:調用一個對象的一個方法,以另一個對象替換當前對象。

說明:

call 方法可以用來代替另一個對象調用一個方法。call 方法可將一個函數的對象上下文從初始的上下文改變為由 thisObj 指定的新對象。

如果沒有提供 thisObj 參數,那麼 Global 對象被用作 thisObj。

看看下面的例子你就明白為什麼那裡沒有執行:

function add(a,b)

{

alert(a+b);

}

function sub(a,b)

{

alert(a-b);

}

add.call(sub,3,1);

這個例子中的意思就是用 add 來替換 sub,add.call(sub,3,1) == add(3,1) ,所以運行結果為:alert(4); // 注意:js 中的函數其實是對象,函數名是對 Function 對象的引用。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/308643.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-03 14:49
下一篇 2025-01-03 14:49

相關推薦

  • JS Proxy(array)用法介紹

    JS Proxy(array)可以說是ES6中非常重要的一個特性,它可以代理一個數組,監聽數據變化並進行攔截、處理。在實際開發中,使用Proxy(array)可以方便地實現數據的監…

    編程 2025-04-29
  • 為什麼Python不能編譯?——從多個方面淺析原因和解決方法

    Python作為很多開發人員、數據科學家和計算機學習者的首選編程語言之一,受到了廣泛關注和應用。但與之伴隨的問題之一是Python不能編譯,這給基於編譯的開發和部署方式帶來不少麻煩…

    編程 2025-04-29
  • Python導入數組

    本文將為您詳細闡述Python導入數組的方法、優勢、適用場景等方面,並附上代碼示例。 一、numpy庫的使用 numpy是Python中一個強大的數學庫,其中提供了非常豐富的數學函…

    編程 2025-04-29
  • 三星內存條參數用法介紹

    本文將詳細解釋三星內存條上面的各種參數,讓你更好地了解內存條並選擇適合自己的一款。 一、容量大小 容量大小是內存條最基本的參數,一般以GB為單位表示,常見的有2GB、4GB、8GB…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • Python返回數組:一次性搞定多種數據類型

    Python是一種多用途的高級編程語言,具有高效性和易讀性的特點,因此被廣泛應用於數據科學、機器學習、Web開發、遊戲開發等各個領域。其中,Python返回數組也是一項非常強大的功…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • Python合併多個相同表頭文件

    對於需要合併多個相同表頭文件的情況,我們可以使用Python來實現快速的合併。 一、讀取CSV文件 使用Python中的csv庫讀取CSV文件。 import csv with o…

    編程 2025-04-29
  • Python去掉數組的中括號

    在Python中,被中括號包裹的數據結構是列表,列表是Python中非常常見的數據類型之一。但是,有些時候我們需要將列表展開成一維的數組,並且去掉中括號。本文將為大家詳細介紹如何用…

    編程 2025-04-29
  • Spring Boot中發GET請求參數的處理

    本文將詳細介紹如何在Spring Boot中處理GET請求參數,並給出完整的代碼示例。 一、Spring Boot的GET請求參數基礎 在Spring Boot中,處理GET請求參…

    編程 2025-04-29

發表回復

登錄後才能評論