call,apply的用法以及模擬實現

2021-10-18 14:15:34 字數 929 閱讀 7717

js的一大特點就是存在 定義時上下文,執行時上下文,和 上下文可以改變 的概念。

首先 舉個栗子

color: 'red',

say: function () `)

}}const banana=

1,把this指向第乙個引數。

2,執行當前呼叫的這個方法。

color: 'red',

say: function (price,size) ,$,$`)

}}const banana=

1,改變this的指向

2,執行方法

那接下來我們一步步的實現

首先,改變this的指向,把this指向改為第乙個引數傳入的物件

在function的原型物件上定義乙個call2的方法,這個方法特別簡單,第一步就是把要指向的函式賦值為context的乙個屬性,第二步執行這個方法,方法執行完成後,第三步銷毀context物件上的這個屬性

後面的測試**輸出了color的值是yellow,說明這個簡單版的call方法是生效的。

//模擬實現

function.prototype.call2=function(context)

//測試**

} color:'red',

say:function()`)

}}const banana=

到現在我們已經實現了最簡陋版本的call方法實現,可是現在並不支援給要執行的方法傳遞引數,那麼接下來我們來實現引數傳遞的功能

我們使用arguments來獲取要傳遞的引數並儲存,在呼叫方法的時候把引數傳遞過去

function.prototype.call2=function(context){

context.fn=this; //這裡的this是要執行的函式本身

let args=;

for(let i=1;i

call apply和bind的用法

在改變this指向的時候,經常會把這三個方法混淆,下面就詳細的整理一下三者的用法和區別 var a var b b.sayname.call a,1,2,3 輸出 張三 6第乙個引數是改變 this 指向的物件 第二個引數必須是乙個陣列 使用後會自動執行 var a var b var arr 1,...

js深入之call apply和bind模擬實現

var foo function fn fn.call foo 1注意 1 call改變了this的指向,指到foo 2 fn函式執行 即可將上面的 改變成下面這種形式 var foo foo.fn 1即將fn作為物件foo的屬性,然後進行呼叫。則可總結出模擬實現的步驟 1 將函式設定為物件的屬性,...

模擬實現call apply以及bind

思路 函式定義在 因為是對全域性有效的,所以定義至function的原型物件中 引數接收引數?繫結函式被呼叫接收第二個以及之後的引數 如何顯式繫結this 如果被呼叫的函式,被指定物件所擁有,那麼函式內部的this,應該指向的是該物件 function.prototype.bind function...