舉個栗子:
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傳...