手動實現apply call bind

2022-01-10 12:30:51 字數 2167 閱讀 2025

window.a = 1; // 定義乙個全域性變數

var obj = // 定義乙個物件用來繫結

var funct = function(b, c) ; // 定義乙個函式用來執行

funct(1, 2); // 1 1 2 // 直接執行,相當於window.funct(1, 2),this繫結於window

base = base || window; // 傳遞繫結的物件為null或undefined時指向window

var result = base.fn(...args); // 呼叫base.fn時,fn中的this指標指向的是base,並使用spread操作符展開引數傳參

delete base.fn; // 刪除base物件的fn屬性

return result; // 將返回值返回

}

funct.call(thisarg[, arg1[, arg2[, ...]]])

thisarg: 必選,在funct函式執行時使用的this值,this可能不是該方法看到的實際值,如果這個函式處於非嚴格模式下,則指定為nullundefined時會自動替換為指向全域性物件,原始值會被包裝。

arg1, arg2, ...: 可選,指定的引數列表。

實現思路,類似於function.prototype.call(),同樣將_call()方法掛載到function.prototype,使得函式物件能夠直接呼叫,在呼叫funct._call()時,在_call()方法中的this指向的是funct物件,將此funct物件作為乙個變數賦予將要繫結的物件的乙個屬性中,使用將要繫結的物件來呼叫這個funct,即可實現this指標指向將要繫結的物件,對於引數的處理,使用es6rest操作符來接收剩餘引數,使用es6spread運算子將陣列展開作為引數傳遞。

window.a = 1; // 定義乙個全域性變數

var obj = // 定義乙個物件用來繫結

var funct = function(b, c) ; // 定義乙個函式用來執行

funct(1, 2); // 1 1 2 // 直接執行,相當於window.funct(1, 2),this繫結於window

funct.call(obj, 1, 2); // 2 1 2 // 使用call將this繫結到obj物件

function.prototype._call = function(base, ...args)

funct._call(obj, 1, 2); // 2 1 2 // this繫結到了obj物件

funct.bind(thisarg[, arg1[, arg2[, ...]]])
window.a = 1; // 定義乙個全域性變數

var obj = // 定義乙個物件用來繫結

var funct = function(b, c) ; // 定義乙個函式用來執行

funct(1, 2); // 1 1 2 // 直接執行,相當於window.funct(1, 2),this繫結於window

var bindfunct = funct.bind(obj, 1, 2); // 使用bind將this繫結到obj物件,bind方法返回乙個原函式的拷貝,並擁有指定的this值和初始引數。

bindfunct(); // 2 1 2

function.prototype._bind = function(base, ...args1)

}var _bindfunct = funct._bind(obj, 1, 2); // 繫結物件

_bindfunct(); // 2 1 2

手動實現strncmp

自己寫的版本 int strncmp char s1,char s2,int maxlen ansi c版本 難懂 360doc.com content 11 0422 23 1317564 111662313.shtml include int strncmp register const cha...

C AOP手動實現

1.使用者註冊介面和實現 public inte ce iuserprocessor public class userprocessor iuserprocessor password user.name,user.password public class user public string ...

KNN 手動實現

knn 的實質是根據 值 與訓練集之間的距離來進行分類。下面 使用 歐氏距離來表示點集之間的距離,具體 如下 class knn def fit self,x,y self.x train x self.y train y def predict self,x,k x train self.x tr...