js中call 和apply 的使用

2021-08-18 00:21:00 字數 1126 閱讀 3249

1.call()的使用

下面來看一段**:

function animal(name,food) 

}function rabbit(name,food)

var judy = new rabbit('judy','carrot');

judy.say();輸出什麼?輸出「judy likes carrot.」

可以看出,我們宣告了乙個叫judy的物件,我們並沒有在rabbit物件裡新增任何屬性和方法,但是我們使用call()繼承了原本屬於animal的屬性和方法。就可以做到animal函式所有能做到的事情。

但是如果不用call()方法時,源**是要這樣寫:

function animal(name,food)

}var judy = new animal('judy','carrot');

judy.say();

輸出依舊是「judy likes carrot.」,所以可以看到call()方法可以實現繼承。

這到底是怎麼做到的呢?讓我們來看看call()的引數:

第乙個是乙個物件,這個物件將代替function類裡原本的this物件,我們傳入的是this,記住,這個this在rabbit函式裡指的是未來將要例項化這個函式的物件(有些拗口),當宣告了judy的時候,這個this指的就是judy。(這裡如果還是想不通,可以複習前面講的this用法)除了第乙個引數,後面所有的引數都是傳給父函式本身使用的引數。

例如,push()方法的引數只能是乙個或者多個引數,而不能是乙個陣列,當我們想要將陣列b拼接到陣列a後面時,傳統的做法是遍歷陣列b,每迴圈一次就push進陣列a後面,這樣就浪費了push()可以傳多個引數的功能。

但可以這樣做:

var list1 = [0,1,2];

var list2 = [3,4,5];

console.log(list1);// [0,1,2,3,4,5]

看起來有點糊塗?可以這樣理解:

list1呼叫了屬於陣列物件的push方法,這個push方法需要傳入乙個引數列表,而恰好我們有了list2這個陣列型別的引數列表,實現了拼接操作。

第三行就相當於:list1.push(3,4,5);

js中call和apply用法

1 方法定義 call方法 語法 call thisobj arg1 arg2 argn 定義 呼叫乙個物件的乙個方法,以另乙個物件替換當前物件。說明 call 方法可以用來代替另乙個物件呼叫乙個方法。call 方法可將乙個函式的物件上下文從初始的上下文改變為由 thisobj 指定的新物件。如果沒...

JS中apply和call的區別

聯絡 obj 這個物件將代替 function類裡this物件,也即 function類 函式 裡的this不在是指 function 本身,而是obj args 這個是陣列型別的引數,它將作為引數傳給function args arguments 結果是還是執行 function 類方法 函式 的...

js中的apply和call函式

主要我是要解決一下幾個問題 obj 這個物件將代替function類裡this物件 args 這個是陣列,它將作為引數傳給function args arguments function.call obj,param1 param2 paramn obj 這個物件將代替function類裡this物...