亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

call和apply的區別?

在您的實例中使用call方法和apply方法有什么區別?使用時應注意什么您可以詳細講解一下嗎?

正在回答

2 回答

好詳細。。。。。。

0 回復 有任何疑惑可以回復我~

apply and call

????它們的作用都是將函數綁定到另外一個對象上去運行,兩者僅在定義參數方式有所區別:

???? apply(thisArg,argArray);

???? call(thisArg[,arg1,arg2…] ]);

即所有函數內部的this指針都會被賦值為thisArg,這可實現將函數作為另外一個對象的方法運行的目的

apply的說明

如果?argArray?不是一個有效的數組或者不是?arguments?對象,那么將導致一個?TypeError。
如果沒有提供?argArray?和?thisArg任何一個參數,那么?Global?對象將被用作?thisArg,?
并且無法被傳遞任何參數。

call的說明

call方法可將一個函數的對象上下文從初始的上下文改變為由?thisArg指定的新對象。
如果沒有提供?thisArg參數,那么?Global?對象被用作?thisArg

相關技巧:

應用call和apply還有一個技巧在里面,就是用call和apply應用另一個函數(類)以后,當前的函數(類)就具備了另一個函數(類)的方法或者是屬性,這也可以稱之為“繼承”。

看下面示例:

//?繼承的演示
function?base() {
????this.member = " dnnsun_Member";
????this.method =?function() {
???????? window.alert(this.member);
???? }
}
function?extend() {
?????base.call(this);
???? window.alert(member);
???? window.alert(this.method);
}


上面的例子可以看出,通過call之后,extend可以繼承到base的方法和屬性。

順便提一下,在javascript框架prototype里就使用apply來創建一個定義類的模式,

其實現代碼如下:

var?Class = {
?? create:?function() {
????returnfunction() {
??????this.initialize.apply(this, arguments);
???? }
?? }
}

解析:從代碼看,該對象僅包含一個方法:Create,其返回一個函數,即類。但這也同時是類的
構造函數,其中調用initialize,而這個方法是在類創建時定義的初始化函數。通過如此途徑,
就可以實現prototype中的類創建模式

示例:

var?vehicle=Class.create();
vehicle.prototype.initialize= function(type)

{
????????this.type=type;
}

vehicle.prototype.showSelf= function()

{
????? alert("this vehicle is "+?this.type);
}


var?moto=new?vehicle("Moto");
moto.showSelf();


?原文http://www.cnblogs.com/Ghost-Draw-Sign/articles/1530108.html


3 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

call和apply的區別?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號