本文目錄一覽:
- 1、如何理解和熟練運用js中的call及apply
- 2、在JS中,call()方法和apply()方法到底該怎麼應用?
- 3、JS中 call和apply的區別和作用
- 4、請教一個js函數裡面的call方法
如何理解和熟練運用js中的call及apply
call和apply
obj.call(thisObj, arg1, arg2, …);
obj.apply(thisObj, [arg1, arg2, …]);
兩者作用一致,都是把obj(即this)綁定到thisObj,這時候thisObj具備了obj的屬性和方法。或者說thisObj『繼承』了obj的屬性和方法。綁定後會立即執行函數。
唯一區別是apply接受的是數組參數,call接受的是連續參數。
function add(j, k){
return j+k;
}
function sub(j, k){
return j-k;
}
我們在控制台運行:
add(5,3); //8
add.call(sub, 5, 3); //8
add.apply(sub, [5, 3]); //8
sub(5, 3); //2
sub.call(add, 5, 3); //2
sub.apply(add, [5, 3]); //2
調用原生對象的方法
示例:
var a = {0:1, 1:”yjc”, length: 2};
a.slice(); //TypeError: a.slice is not a function
Array.prototype.slice.call(a);//[1, “yjc”]
對象a類似array,但不具備array的slice等方法。使用call綁定,這時候就可以調用slice方法。
實現繼承
通過call和apply,我們可以實現對象繼承。示例:
var Parent = function(){
this.name = “yjc”;
this.age = 22;
}
var child = {};
console.log(child);//Object {} ,空對象
Parent.call(child);
console.log(child); //Object {name: “yjc”, age: 22}
以上實現了對象的繼承。
bind的使用
obj.bind(thisObj, arg1, arg2, …);
把obj綁定到thisObj,這時候thisObj具備了obj的屬性和方法。與call和apply不同的是,bind綁定後不會立即執行。
同樣是add()和sub():
add.bind(sub, 5, 3); //不再返回8
add.bind(sub, 5, 3)(); //8
如果bind的第一個參數是null或者undefined,等於將this綁定到全局對象。
在JS中,call()方法和apply()方法到底該怎麼應用?
1.apply與call是更改對象的內部指針,即改變對象的this指向的內容;
2.call與apply的第一個參數都是要傳入給當前對象的對象,及函數內部的this,後面的參數都是傳遞給當前對象的參數。
詳細用法如下:
1.call()
語法:obj1.call(obj2[,param1,param2,…]);
定義:用obj2對象來代替obj1,調用obj1的方法。即將obj1應用到obj2上;
說明:call 方法可以用來代替另一個對象調用一個方法,call 方法可將一個函數的對象上下文從初始的上下文改變為由 obj2 指定的新對象,如果沒有提供 obj2參數,那麼 Global 對象被用作 obj2。
2.apply()
語法:obj1.call(obj2[,arrArg]);
定義:用obj2對象來代替obj1,調用obj1的方法,即將obj1應用到obj2上,
說明:call ()和apply()作用一樣,但是call()可以接收任何類型的參數,而apply()只能接收數組參數。
3.基本用法
4.繼承特性
JS中 call和apply的區別和作用
JavaScript中的每一個function對象都會有call和apply方法
定義:
apply:調用一個對象的一個方法,用另一個對象替換當前對象。例如:B.apply(A, arguments);即A對象應用B對象的方法。
call:調用一個對象的一個方法,用另一個對象替換當前對象。例如:B.call(A, args1,args2);即A對象調用B對象的方法
從定義中可以看出,call和apply都是調用一個對象的一個方法,用另一個對象替換當前對象。而不同之處在於傳遞的參數,apply最多只能有兩個參數——新this對象和一個數組argArray,如果arg不是數組則會報錯TypeError;
call則可以傳遞多個參數,第一個參數和apply一樣,是用來替換的對象,後邊是參數列表。
請教一個js函數裡面的call方法
親,call方法:
語法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定義:調用一個對象的一個方法,以另一個對象替換當前對象。
說明:
call 方法可以用來代替另一個對象調用一個方法。call 方法可將一個函數的對象上下文從初始的上下文改變為由 thisObj 指定的新對象。
如果沒有提供 thisObj 參數,那麼 Global 對象被用作 thisObj。
看看下面的例子你就明白為什麼那裡沒有執行:
function add(a,b)
{
alert(a+b);
}
function sub(a,b)
{
alert(a-b);
}
add.call(sub,3,1);
這個例子中的意思就是用 add 來替換 sub,add.call(sub,3,1) == add(3,1) ,所以運行結果為:alert(4); // 注意:js 中的函數其實是對象,函數名是對 Function 對象的引用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/308643.html