深入JavaScript之call和apply方法

2021-09-14 06:00:08 字數 1142 閱讀 8918

其實只要你認真的研究一下, 就會發現我和我哥們一點也不難。有些地方沒有咱倆還真不行。要說咱倆有啥用,我管咱倆的功能叫借過來玩一玩。你看下面的例子啊:

let cat = ,

sleep: function(time)

}let dog =

}dog.playball(); //i am a doggy, i love playing ball

cat.eat(); //i want to eat fish

cat.eat.call(dog); //i want to eat bone

喵星人那裡定義了eat方法,而汪星人裡邊只定義了playball方法,懶惰的汪星人不想在自己內部再定義乙個重複的eat方法,但是又想吃吃吃,那怎麼辦呢?

當然就是通過我call方法來找喵星人把eat方法借過來玩一玩啦。所以呢:

cat.eat.call(dog);的意思就是:喵哥!你的eat方法借dog玩一玩唄!你那個eat方法裡的this現在指向了dog了啊!

這下你明白了為啥我的功能是借過來玩一玩了吧:

1.沒有的方法我去別人那裡借。

2.我可以改變被呼叫方法內部的this指向, this指向第乙個引數。

除此之外,你可能會問了,假如我要呼叫的函式要接收引數,要怎麼辦呢?那麼可以用到我call方法接收的第2,3,4...個引數了!

cat.sleep.call(dog, 'all day'); //i sleep all day
function myfunction(arg1, arg2, arg3, arg4)
我call的使用方法是myfunction.call(null, '1', '2', '3', '4')
//這個函式熟悉吧?求傳入引數的最大值

math.max(1, 2, 3); //3

let myarray = [1, 2, 3];
ps: 也可以使用...運算子math.max(...myarray);

我們這對難兄難弟其實一點也不難啊!(╯﹏╰)

深入javascript之原型和原型鏈

所有引用型別 函式,陣列,物件 都擁有 proto 屬性 隱式原型 所有函式擁有prototype屬性 顯式原型 僅限函式 原型物件 擁有prototype屬性的物件,在定義數時就被建立 先複習下建構函式 建立建構函式 function word words word.prototype 建立例項 ...

深入JavaScript之原型和原型鏈

所有引用型別 函式 陣列 物件 都擁有 proto 屬性 隱式原型 所有函式擁有prototype屬性 顯式原型 僅限函式 原型物件 擁有prototype屬性的物件,在定義函式時就被建立 建立建構函式 function word words word.prototype 建立例項 var w ne...

JavaScript深入之new的模擬實現

function otaku name,age 因為缺乏鍛鍊的緣故,身體強度讓人擔憂 otaku.prototype.strength 60 otaku.prototype.sayyourname function var person newotaku kevin 18 console.log p...