js中call和apply的模擬實現

2021-09-24 02:45:13 字數 731 閱讀 9210

示例:call的正常使用

var key = "windowk";

var obj =

function fn(name,age)

fn("lucy", 20); //"name=lucy ; age=20 ; this.key=windowk"

fn.call(obj,"lucy",20); //"name=lucy ; age=20 ; this.key=objk"

如何修改函式的this指向呢?我們知道函式以物件的形式呼叫時,this指向該物件。由此可以想到把函式賦值給物件(obj)的新屬性(fn),然後呼叫該物件(obj)的屬性(fn),函式的this自然指向物件(obj)。但這樣操作的話物件會增加新的屬性,該屬性只是為改變this指向新增的,並無實際意義,所以呼叫完物件屬性方法後,需要刪除該物件屬性。

故call模擬的步驟可以分為3步:

1)將函式設為物件的屬性;

2)執行該函式;

3)刪除該函式;

示例:call的模擬實現

function.prototype.mcall = function(newobj){

newobj = newobj||window;

newobj.fn = this;

var args = ;

for(var i=1,ln=arguments.length; i

js中call和apply用法

1 方法定義 call方法 語法 call thisobj arg1 arg2 argn 定義 呼叫乙個物件的乙個方法,以另乙個物件替換當前物件。說明 call 方法可以用來代替另乙個物件呼叫乙個方法。call 方法可將乙個函式的物件上下文從初始的上下文改變為由 thisobj 指定的新物件。如果沒...

JS中apply和call的區別

聯絡 obj 這個物件將代替 function類裡this物件,也即 function類 函式 裡的this不在是指 function 本身,而是obj args 這個是陣列型別的引數,它將作為引數傳給function args arguments 結果是還是執行 function 類方法 函式 的...

js中的apply和call函式

主要我是要解決一下幾個問題 obj 這個物件將代替function類裡this物件 args 這個是陣列,它將作為引數傳給function args arguments function.call obj,param1 param2 paramn obj 這個物件將代替function類裡this物...