成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

小技巧:如何在 js 中使用 apply 語法執(zhí)行 new?

GeekQiaQia / 1007人閱讀

摘要:問題簡而言之,我有一個類函數(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

相關(guān)文章

  • 從Ecma規(guī)范深入理解this

    摘要:本文總結(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...

    rottengeek 評論0 收藏0
  • 如何編寫避免垃圾開銷的實時Javascript代碼

    摘要:在語言中我們很難完全避免垃圾開銷。它的垃圾收集模式在根本上是不符合像游戲這樣的實時軟件需求的。此外,在所有可能的情況下避免向量對象如中的和屬性。 在 Javascript 語言中我們很難完全避免垃圾開銷。它的垃圾收集模式在根本上是不符合像游戲這樣的實時軟件需求的。在這篇文章中我們主要介紹了一些關(guān)于 javascript 垃圾回收的方法。 編輯于 2012 年 3 月 27 日: 哇,這...

    Shisui 評論0 收藏0
  • Pandas數(shù)據(jù)類型轉(zhuǎn)換的幾個技巧

    摘要:利用的一些輔助函數(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所能處理的...

    luckyw 評論0 收藏0
  • Web前端開發(fā)過程踩過的坑以及一些方法技巧(持續(xù)更新)

    摘要:一上瀏覽器使用不允許事件代理到上選擇器以上綁定可能會出現(xiàn)點擊失效的情況。對于,如果工具是以下版本,在中加入以下代碼以上的版本加入以下代碼八開發(fā)對于文件的處理問題。解決方法有給元素設(shè)置絕對定位即可。元素?fù)Q成內(nèi)聯(lián)元素,如。 一、iOS上瀏覽器使用jQuery不允許事件代理到document上 $(document).on(click, 選擇器, function(){}); 以上綁定可能...

    arashicage 評論0 收藏0
  • Web前端開發(fā)過程踩過的坑以及一些方法技巧(持續(xù)更新)

    摘要:一上瀏覽器使用不允許事件代理到上選擇器以上綁定可能會出現(xiàn)點擊失效的情況。對于,如果工具是以下版本,在中加入以下代碼以上的版本加入以下代碼八開發(fā)對于文件的處理問題。解決方法有給元素設(shè)置絕對定位即可。元素?fù)Q成內(nèi)聯(lián)元素,如。 一、iOS上瀏覽器使用jQuery不允許事件代理到document上 $(document).on(click, 選擇器, function(){}); 以上綁定可能...

    binta 評論0 收藏0

發(fā)表評論

0條評論

GeekQiaQia

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<