最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

由JavaScript中call()方法引發(fā)的對面向對象繼承機制call的思考_javascript技巧

來源:懂視網(wǎng) 責編:小采 時間:2020-11-27 21:00:34
文檔

由JavaScript中call()方法引發(fā)的對面向對象繼承機制call的思考_javascript技巧

由JavaScript中call()方法引發(fā)的對面向對象繼承機制call的思考_javascript技巧:起因: 今天在閱讀snandy大神的讀jQuery之五(取DOM元素)時,看到有講到toArray()方法,具體jQuery代碼如下: 代碼如下: toArray: function() { return slice.call( this, 0 ); }, get: function( num ) { return
推薦度:
導讀由JavaScript中call()方法引發(fā)的對面向對象繼承機制call的思考_javascript技巧:起因: 今天在閱讀snandy大神的讀jQuery之五(取DOM元素)時,看到有講到toArray()方法,具體jQuery代碼如下: 代碼如下: toArray: function() { return slice.call( this, 0 ); }, get: function( num ) { return

起因:
  今天在閱讀snandy大神的讀jQuery之五(取DOM元素)時,看到有講到toArray()方法,具體jQuery代碼如下:
代碼如下:
toArray: function() {
return slice.call( this, 0 );
},
get: function( num ) {
return num == null ?
// Return a 'clean' array
this.toArray() :
// Return just the object
( num < 0 ? this[ this.length + num ] : this[ num ] );
},

看到這里的call()方法,以前也看過手冊,說是對象冒充的,用于繼承的。在jQuery源碼里有點亂,所以就把這部分提取出來,放在一個單獨文件中,來看看具體執(zhí)行。

  但還是沒太明白,今天決定研究下call。于是查了下MDN上的說明,心血來潮,拿出我的“葵花寶典”-牛津大辭典,準備練習下自己的英文水平,提高提高,而且也提供給有需要的朋友一些幫助(翻譯中如果有些出路,請各位前輩見諒?。?
call
  摘要:
     通過給定的this和arguments來調用一個function
     注意:該方法與apply方法語法相似,但不同的是:call()接受參數(shù)列,而apply()接受傳遞給函數(shù)的參數(shù)數(shù)組
     Function類的一個方法:版本JavaScript 1.3版以后
  語法:
     fun.call(thisArg[, arg1[, arg2[, ...]]])
  參數(shù)說明:
     thisArg:
        為fun()的調用指定對象。注意:你看到的this值可能不是實際的值:如果這個方法是在 non-strict mode下,null和undefined會被全局對象替換掉,原始的值會被封裝。
     arg1,arg2,....
        this對象的參數(shù)
  描述:
    當調用一個已存在的函數(shù),你可以分配不同的對象。這時,this指定的對象是當前正在調用對象。
    通過call,你可以只寫一次方法,而被另一個對象來繼承。而不用自己再新建對象時,重寫該方法。(即對象冒充,下面會有例子說明?。?

在MDN官網(wǎng)上面有例子可以看看。另外,無意中在stackoverflow上看到了篇相關的問題,看到里面的一個回答,一下子就明白了對象冒充,怎么冒充了。
下面把那部分摘取出來(點擊這里看原文):

In javascript, methods of an object can be bound to another object at runtime. In short, javascript allows an object to "borrow" the method of another object:
代碼如下:
object1 = {
name:'frank',
greet:function(){
alert('hello '+this.name)
}
};
object2 = {
name:'andy'
};
// Note that object2 has no greet method.
// But we may "borrow" from object1:
object1.greet.call(object2);

The call and apply methods of function objects (in javascript functions are objects as well) allows you to do this. So in your code you could say that the Nodelist is borrowing an array's slice method. What does the conversion is the fact that slice returns another array as it's result.    

這里的第一句話說的很形象,大致意思就是:在JavaScript中,對象的方法可綁定到另外一個對象上。簡單點說,就是,JavaScript中允許對象‘借用'本不屬于它本身的方法。“冒充”也就不言而喻了,就上上面的例子來說,object2冒充object1,來調用object1的方法。

PS:菜鳥第一次寫博客,有點亂,我相信以后會慢慢改善,向各位師兄師姐學習怎么寫博客,寫好博客。另外歡迎大家給我批評與指導!

參考資料:
1.w3cschool ECMAScript 繼承機制實現(xiàn)

2.MDN上call的說明

3.stackoverflow

聲明:本網(wǎng)頁內容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

由JavaScript中call()方法引發(fā)的對面向對象繼承機制call的思考_javascript技巧

由JavaScript中call()方法引發(fā)的對面向對象繼承機制call的思考_javascript技巧:起因: 今天在閱讀snandy大神的讀jQuery之五(取DOM元素)時,看到有講到toArray()方法,具體jQuery代碼如下: 代碼如下: toArray: function() { return slice.call( this, 0 ); }, get: function( num ) { return
推薦度:
標簽: call javascript 繼承
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top