日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JS中apply和call的联系和区别

發布時間:2025/5/22 javascript 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JS中apply和call的联系和区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以下內容翻譯自stackoverflow

鏈接:

http://stackoverflow.com/questions/7238962/function-apply-not-using-thisarg-parameter

?

在AS3中,Method(方法)不同于Function(函數),Method是類的一部分,并且是和實例綁定【就是說這個類一旦實例化了,類里定義的Method會綁定這個實例】,看這個鏈接的第二部分關于Method,引用一部分:

?

Methods是類定義的functions(函數),一旦類實例化,method會綁定這個實例。函數可以聲明在類外,而方法不能脫離類而單獨使用。

?

所以,當我們創建一個MyObj類,類里所有方法綁定這個實例,這就是為什么當你想使用call或apply(的第一個參數),并沒有發現this(這個指針)被重新定向為新的對象。看Bound Methods的解釋細節。(隨后有時間翻譯一下bound methods)

?

看這個鏈接解釋traits object(有時間翻譯),actionscript 用來解決method,并用作背后可能會歸咎于的性能原因,這個traits object和類方法都僅僅是遵從ECMAScript模式的語法糖:

var TestClass = function(data) {var self = this;this.data = data;this.boundWork = function() {return self.constructor.prototype.unboundWork.apply(self, arguments);}; };TestClass.prototype.unboundWork = function() {return this.data; };

(上面的寫法,我認為是沒有加入語法糖的寫法,看起來要理解一番)

var a = new TestClass("a"); var b = new TestClass("b");alert(a.boundWork()); // a alert(b.boundWork()); // balert(a.unboundWork()); // a alert(b.unboundWork()); // balert(a.boundWork.call(b)); // a alert(a.boundWork.call(undefined)); // aalert(a.unboundWork.call(b)); // b

或更有趣的寫法:

var method = a.unboundWork; method() // undefined. ACK!

再來對比:

method = a.boundWork; method() // a. TADA MAGIC!

注意看boundWork的執行一直是服從于在它所屬的實例,不管你把this改成了什么對象,并用call和apply方法怎么調用。在ActionScript里,這種方式就解釋了為什么類里的方法是綁定于它的實例。所以不管這兩個方法在哪用,他們始終指向的都是他們所對應的實例(這和actionScript里的事件模型有點類似)。一旦你理解了,那么這種迂回的解決辦法就可以被理解了。(這里作者用到一個很有意思的詞work-around)

(解釋:work-around

中文解釋

雖不能根本解決, 但能避開問題的替代方法。

避免問題或困難而旁道而行達到目的。

權宜之計; 應急之策。

原本是電腦術語, 相對於「Fix」而言. 當一個程式有了問題, 找出問題所在然後直接解決它叫做「Fix」; 當問題始終無法解決, 於是想個方法忽略這個問題並使這個問題不致於影響你要用這程式達到的目的, 這樣的方法就叫 Workaround。

?

英文解釋

workaround means a manner of bypassing a problem caused by a bug without correcting the bug itself.

workaround is similar to "stopgap solution". If there is a problem, a "workaround" doesn‘t eliminate the problem, but it does bypass the problem.

)

(自己主觀理解:)

在某些地方,如果你既想需要在類里聲明方法,還想用這個方法做自己的事(改變這個方法所指的對象,就是重寫this一樣),(有空翻譯prototype function用法,用的有點抽象)你可以這樣寫:

package {import flash.display.Sprite; public class FunctionApplyTest extends Sprite{public function FunctionApplyTest(){var objA:MyObj = new MyObj("A");var objB:MyObj = new MyObj("B");objA.sayName();objB.sayName();objA.sayName.apply(objB, []); // aobjA.sayName.call(objB); // aobjA.pSayName.call(objB) // b <---}} }internal dynamic class MyObj {private var _name:String;public function MyObj(name:String){_name = name;} public function sayName():void{trace(_name);}prototype.pSayName = function():void {trace(this._name);}; }

上面代碼里,嚴重注意sayName和pSayName的區別,sayName一直和實例綁定的,但是pSayName就不同了,它既可被MyObj的實例利用,但又不會與特定的實例綁定。

轉載于:https://www.cnblogs.com/Unknw/p/6540054.html

總結

以上是生活随笔為你收集整理的JS中apply和call的联系和区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 884aa四虎影成人精品一区 | 在线免费黄网 | 青青草视频黄 | 国产精品一级 | 亚洲com| 无码av免费精品一区二区三区 | 五月天婷婷综合网 | 欧美日韩一区免费 | 精品视频一区二区 | 最新色网站 | 三大队在线观看 | 日韩三级av | 男女激情四射网站 | 天天爽天天做 | 娇小6一8小毛片 | 骚虎视频最新网址 | 一本一道人人妻人人妻αv 九一在线视频 | 亚洲一区欧洲二区 | 菠萝菠萝蜜网站 | 日本不卡一区在线观看 | 91在线| 四虎新网站 | 在线观看中文字幕一区 | 亚洲午夜精品久久久久久浪潮 | 成人在线天堂 | 欧美鲁鲁| 午夜秋霞影院 | 国产999在线观看 | 天堂网www| 国产做受91 | 欧美日韩国产高清视频 | 岛国精品 | 粉嫩aⅴ一区二区三区四区五区 | 蜜桃精品久久久久久久免费影院 | 日日摸日日碰夜夜爽无码 | 中国人与拘一级毛片 | 捆绑调教sm束缚网站 | 毛片av在线播放 | 国产婷婷久久 | 精品无码av一区二区三区四区 | 性歌舞团一区二区三区视频 | 黄色一级大片在线免费看国产 | av免费网站 | jzjzz成人免费视频 | 裸体的日本在线观看 | 一边摸一边抽搐一进一出视频 | 中文字幕69 | 国产精品乱码一区二区视频 | 91猎奇在线观看 | 春色激情 | 四虎av在线播放 | 麻豆久久久 | 黄色成年人视频 | 最好看的2019中文大全在线观看 | 午夜精品在线观看 | 被黑人各种姿势猛c哭h文1 | 欧美日韩首页 | av福利在线看 | 成人激情视频网 | 性生交大片免费看视频 | 国产91在线高潮白浆在线观看 | 中文在线观看视频 | 日日噜噜夜夜狠狠久久丁香五月 | 不卡av免费观看 | 狠狠操免费视频 | 日韩美女视频在线观看 | 国产视频1区2区3区 国产欧美一区二区精品性色99 | 国产精品久久久久久一区二区三区 | 人人看人人艹 | 中文字幕成人在线视频 | 久久久久97| 秋霞成人 | 日本在线看片 | 国产毛片久久久久久国产毛片 | 理论片一区| 欧美一区二区视频 | 男女日日 | 波多野结衣一区二区三区 | 国产欧美日韩综合精品一区 | 欧美性做爰猛烈叫床潮 | 久久性爱视频网站 | 久久久视频在线 | 亚洲精品在线免费看 | 亚洲第一av| 欧美性猛交xxxx黑人猛交 | 日本毛片在线观看 | 99精品一级欧美片免费播放 | 欧美xxxx胸大 | 国产精品久久久久av | av动漫在线免费观看 | 激情久久免费视频 | 女人毛片视频 | 欧美成人一区二区三区四区 | 99热伊人| 欧美大胆a视频 | 国产伦理久久精品久久久久 | 99久精品| 在线一区视频 | 亚洲欧洲久久久 |