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方法是生效的。
//模擬實現到現在我們已經實現了最簡陋版本的call方法實現,可是現在並不支援給要執行的方法傳遞引數,那麼接下來我們來實現引數傳遞的功能function.prototype.call2=function(context)
//測試**
} color:'red',
say:function()`)
}}const banana=
我們使用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...