模擬實現call apply以及bind

2021-09-28 14:45:51 字數 1036 閱讀 2616

思路:

函式定義在**?

因為是對全域性有效的,所以定義至function的原型物件中

引數接收引數?

繫結函式被呼叫接收第二個以及之後的引數

如何顯式繫結this

如果被呼叫的函式,被指定物件所擁有,那麼函式內部的this,應該指向的是該物件

function.prototype.bind = function(context) 

let name = '全域性的'

function sayname()

let obj =

sayname.bind(obj)

let ctx = context || window

ctx.func = this

let args = arguments[1]

let isarray = array.isarray(args)

if (!isarray)

let res = args ? ctx.func(...args) : ctx.func()

delete ctx.func

return res

}let name = '全域性的'

function sayname()

let obj =

思路:函式定義在**?

因為是對全域性有效的,所以定義至function的原型物件中

引數接收引數?

bind函式返回乙個繫結函式,最終呼叫需要傳入函式實參和繫結函式的實參!!

如何顯式繫結this

如果被呼叫的函式,被指定物件所擁有,那麼函式內部的this,應該指向的是該物件

function.prototype.bind = function(context) 

}let name = '全域性的'

function sayname()

let obj =

// sayname.bind(obj)

sayname.bind(obj)()

參考文件

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

js的一大特點就是存在 定義時上下文,執行時上下文,和 上下文可以改變 的概念。首先 舉個栗子 color red say function const banana 1,把this指向第乙個引數。2,執行當前呼叫的這個方法。color red say function price,size con...

js模擬實現過載以及預設引數

眾所周知,js是函式不支援過載和預設引數的,但是我們可以使用一些其他方法來模擬這個方法的實現。首先看一下過載的定義 函式名相同,函式的引數列表不同 包括引數個數和引數型別 至於返回型別可同可不同。以及預設引數的定義 預設引數指的是當函式呼叫中省略了實參時自動使用的乙個值。那麼如何實現這兩個功能呢,乙...

模擬實現Spring IOC

通過在類上標註 registration 註冊進容器,injection從容器注入物件 容器類 public class springcontainer else bean.setbeanclass c mappropsmap new hashmap 處理注入屬性 field props c.get...