最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

由JavaScript中call()方法引發(fā)的對(duì)面向?qū)ο罄^承機(jī)制call的思考

 更新時(shí)間:2011年09月12日 14:06:12   作者:  
看到這里的call()方法,以前也看過手冊(cè),說是對(duì)象冒充的,用于繼承的。在jQuery源碼里有點(diǎn)亂,所以就把這部分提取出來,放在一個(gè)單獨(dú)文件中,來看看具體執(zhí)行。
起因:
  今天在閱讀snandy大神的讀jQuery之五(取DOM元素)時(shí),看到有講到toArray()方法,具體jQuery代碼如下:
復(fù)制代碼 代碼如下:

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()方法,以前也看過手冊(cè),說是對(duì)象冒充的,用于繼承的。在jQuery源碼里有點(diǎn)亂,所以就把這部分提取出來,放在一個(gè)單獨(dú)文件中,來看看具體執(zhí)行。

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

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

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:
復(fù)制代碼 代碼如下:

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中,對(duì)象的方法可綁定到另外一個(gè)對(duì)象上。簡(jiǎn)單點(diǎn)說,就是,JavaScript中允許對(duì)象‘借用'本不屬于它本身的方法。“冒充”也就不言而喻了,就上上面的例子來說,object2冒充object1,來調(diào)用object1的方法。

PS:菜鳥第一次寫博客,有點(diǎn)亂,我相信以后會(huì)慢慢改善,向各位師兄師姐學(xué)習(xí)怎么寫博客,寫好博客。另外歡迎大家給我批評(píng)與指導(dǎo)!

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

2.MDN上call的說明

3.stackoverflow

相關(guān)文章

最新評(píng)論

邢台市| 泽普县| 曲松县| 牙克石市| 临高县| 平远县| 资阳市| 昌邑市| 来安县| 吐鲁番市| 久治县| 天津市| 马公市| 凉城县| 福贡县| 修水县| 大宁县| 湄潭县| 福州市| 平昌县| 翼城县| 长汀县| 琼结县| 无极县| 勃利县| 托里县| 张家港市| 离岛区| 汪清县| 南安市| 广南县| 敦化市| 临洮县| 郎溪县| 绥江县| 墨玉县| 屏边| 高邑县| 全椒县| 万年县| 大理市|