JavaScript中的call和apply應用

2021-09-08 04:36:50 字數 1504 閱讀 9009

舉個栗子:

const obj1 =

};

const obj2 =

console.log(obj1.getname()); // "microzz"

console.log(obj1.getname.call(obj2)); // "zhaohui"

有的時候我們會覺得 document.getelementbyid這個方法太長了,我們會嘗試用乙個短函式來代替它,如同prototype.js等一些框架所做過的事情,下面用**說明:

const getid = function(id)

getid(

'id');

document.getelementbyid = (function(func)

})( document.getelement);

const getid = document.getelementbyid;

在大部分高階瀏覽器已經實現了內建的function.prototype.bind,用來指定函式內部的this指向,如果沒有原生的function.prototype.bind,我們也可以模擬乙個,**如下:

function.prototype.bind = function(context)

}

var obj = ;

var func = function() .bind(obj);

func();

這是乙個簡化版的,通常我們會實現得稍微複雜一點:

function.prototype.bind = function()

}

var obj = ;

var func = function(a, b, c, d) .bind(obj,

1, 2);

func(

3, 4);

借用建構函式

借用方法的第一種場景是「借用建構函式」,可以實現類似繼承的效果:

var a = function(name)

var b = function()

b.prototype.getname =

function()

var b = new b('microzz');

console.log(b.getname()); // microzz

類陣列函式引數列表arguments是乙個類陣列物件,雖然它有下標,但是並不是真正的陣列。為了能使用陣列的一些方法,我們常常會借用array.prototype物件上的方法。

比如想往arguments中新增新元素,通常會借用array.prototype.push

想把arguments轉成真正陣列的時候,可以借用array.prototype.slice或者也可以使用es6的array.from

javascript中apply與call函式

首先,function是乙個指向function物件,函式名是乙個指向函式的指標。那麼在函式體內,就會有乙個作用域,即this關鍵字。this關鍵字指的是函式執行的作用域,舉個例子來說,上面這段 中的函式funca定義在全域性環境中,那麼函式體內的this即window物件。我們定義funcb函式的...

JavaScript中apply和call的理解

這兩個方法作用是相同,只是用法不同,null 代表不需要改變this的指向 console.log math.max.call null,1,2,3,4,5,6,1000 var obj1 var obj2 window.name window var getname function getnam...

ExtJs與JavaScript的call方法

今天在看其他人 的時候發現呼叫的函式和自己想像的不一樣。所以認真看了一下 再結合之前js關於call的筆記。知道了其中的原因 如下 複製 son.superclass.initcomponent.call this 這裡的call就是呼叫 son 父類的initcomponent函式,並把this傳...