js手動實現call,apply,bind

2021-08-26 05:21:49 字數 1087 閱讀 9384

原文

我也不知道為什麼只能顯示一部分  好氣哦  看原文吧 

先分析下3個方法的作用

改變this的指向

首先我們知道,物件上的方法,在呼叫時,this是指向物件的。

let o = 

}o.fn() // object

// 函式原型上新增 mycall方法 來模擬call

function.prototype.mycall = function(obj)

下面測試一下

let test = 

let o =

}o.fn() // "o"

o.fn.call(test) // "test"

o.fn.mycall(test) // "test"

傳入引數

// 只需要在原來的基礎上 用下拓展運算子 剩餘運算子即可

function.prototype.mycall = function(obj,...arg)

//測試

let test =

let o =

}o.fn(1,2,3) // "o" 1 2 3

o.fn.call(test,1,2,3) // "test" 1 2 3

o.fn.mycall(test,1,2,3) // "test" 1 2 3

// 沒問題

function.prototype.mycall = function(obj){

let arg = ;

for(let i = 1 ; iarg.push( 'arguments[' + i + ']' ) ;

// 這裡要push 這行字串 而不是直接push 值

// 因為直接push值會導致一些問題

// 例如: push乙個陣列 [1,2,3]

// 在下面

js 難點之call,apply實現

1 function bar bar.call foo 1 bar 函式執行了 1,bar function foo.bar 1 執行該函式 刪除該函式 foo.fn bar 第二步 foo.fn 第三步 delete foo.fn function.prototype.call2 function...

原生JS 封裝call apply 函式

var value window var obj function show name,age 改變this指向的原理大概是這個樣子的 obj.show show obj.show delete obj.show 很簡單的過程,應該都能明白在函式的原型鏈上封裝兩個函式 封裝call函式 functi...

js物件之call,apply方法

首先我們來看看call如何借調方法 下面來演示一下 這樣就行了,注意被借調的不管是原型物件方法還是私有的方法只要是這個例項的屬性裡面有的都可以借調,換句話說,由建構函式例項化出來的內容都可以被借調,而這個例項出來的物件裡面含有建構函式裡面的內容和原型物件裡面的內容。有人碩這樣乙個乙個的借調有點麻煩,...