摘要:問題簡而言之,我有一個類函數(shù)但是我想使用數(shù)組作為參數(shù)表創(chuàng)建實例,比如請問,應(yīng)如何實現(xiàn)解答最直接的方法是使用。應(yīng)用場景有興趣可以思考一下,什么場景會用到這樣的代碼我是在實現(xiàn)任意類函數(shù)的時候用到的。
本文沒什么營養(yǎng),只是臨時用到記錄一下,學(xué)習(xí)的請繞道。
問題簡而言之,我有一個類函數(shù):
function F(m, n){ this.v = m * n; } var f = new F(1, 2);
但是我想使用數(shù)組作為參數(shù)表創(chuàng)建實例,比如:
var f = applyNew(F, [1, 2]);
請問,applyNew應(yīng)如何實現(xiàn)?
解答1最直接的方法是使用 Function.prototype.bind。實現(xiàn)代碼如下:
function applyNew(ctor, args) { var applyArgs = ([{}]).concat(args || []); var f = Function.prototype.bind.apply(ctor, applyArgs); return new f(); }
注意,([{}]).concat(args || [])這行代碼是因為 bind 不僅要綁定參數(shù),還要綁定 this,因為 new 操作會把心創(chuàng)建的對象作為 this,所以這里綁定誰都無所謂,隨便分配一個即可。
解答2如果不想使用 bind,還可以自己實現(xiàn):
function applyNew(ctor, args) { function F() { return ctor.apply(this, args); } F.prototype = ctor.prototype; return new F(); }
實際上這等于自己用閉包實現(xiàn)了 bind。但是這里有一個問題:如果 ctor 是 String、Array、Date 這樣的 native 類函數(shù),這種方法就不適用了。
應(yīng)用場景有興趣可以思考一下,什么場景會用到這樣的代碼?我是在實現(xiàn)任意類函數(shù) mixin 的時候用到的。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/80277.html
摘要:本文總結(jié)了的各種情況,并從規(guī)范的角度探討了的具體實現(xiàn),希望對大家理解有所幫助。規(guī)范規(guī)范里面詳細(xì)介紹了的實現(xiàn)細(xì)節(jié),通過閱讀規(guī)范,我們可以更準(zhǔn)確的理解上述四種情況到底是怎么回事。由于本人能力有限,如有理解錯誤的地方還望指出。 this是面向?qū)ο缶幊讨械囊粋€概念,它一般指向當(dāng)前方法調(diào)用所在的對象,這一點在java、c++這類比較嚴(yán)格的面向?qū)ο缶幊陶Z言里是非常明確的。但是在javascript...
摘要:在語言中我們很難完全避免垃圾開銷。它的垃圾收集模式在根本上是不符合像游戲這樣的實時軟件需求的。此外,在所有可能的情況下避免向量對象如中的和屬性。 在 Javascript 語言中我們很難完全避免垃圾開銷。它的垃圾收集模式在根本上是不符合像游戲這樣的實時軟件需求的。在這篇文章中我們主要介紹了一些關(guān)于 javascript 垃圾回收的方法。 編輯于 2012 年 3 月 27 日: 哇,這...
摘要:利用的一些輔助函數(shù)進行類型轉(zhuǎn)換的函數(shù)和復(fù)雜的自定函數(shù)之間有一個中間段,那就是的一些輔助函數(shù)。這些輔助函數(shù)對于某些特定數(shù)據(jù)類型的轉(zhuǎn)換非常有用如。 利用Pandas進行數(shù)據(jù)分析時,確保使用正確的數(shù)據(jù)類型是非常重要的,否則可能會導(dǎo)致一些不可預(yù)知的錯誤發(fā)生。筆者使用Pandas已經(jīng)有一段時間了,但是還是會在一些小問題上犯錯誤,追根溯源發(fā)現(xiàn)在對數(shù)據(jù)進行操作時某些特征列并不是Pandas所能處理的...
摘要:一上瀏覽器使用不允許事件代理到上選擇器以上綁定可能會出現(xiàn)點擊失效的情況。對于,如果工具是以下版本,在中加入以下代碼以上的版本加入以下代碼八開發(fā)對于文件的處理問題。解決方法有給元素設(shè)置絕對定位即可。元素?fù)Q成內(nèi)聯(lián)元素,如。 一、iOS上瀏覽器使用jQuery不允許事件代理到document上 $(document).on(click, 選擇器, function(){}); 以上綁定可能...
摘要:一上瀏覽器使用不允許事件代理到上選擇器以上綁定可能會出現(xiàn)點擊失效的情況。對于,如果工具是以下版本,在中加入以下代碼以上的版本加入以下代碼八開發(fā)對于文件的處理問題。解決方法有給元素設(shè)置絕對定位即可。元素?fù)Q成內(nèi)聯(lián)元素,如。 一、iOS上瀏覽器使用jQuery不允許事件代理到document上 $(document).on(click, 選擇器, function(){}); 以上綁定可能...
閱讀 2573·2023-04-25 20:05
閱讀 2907·2023-04-25 17:56
閱讀 2217·2021-10-14 09:49
閱讀 2702·2019-08-29 15:10
閱讀 2933·2019-08-29 12:25
閱讀 430·2019-08-28 18:23
閱讀 768·2019-08-26 13:26
閱讀 1384·2019-08-23 18:21