国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

GeekQiaQia / 1004人閱讀

摘要:?jiǎn)栴}簡(jiǎn)而言之,我有一個(gè)類函數(shù)但是我想使用數(shù)組作為參數(shù)表創(chuàng)建實(shí)例,比如請(qǐng)問(wèn),應(yīng)如何實(shí)現(xiàn)解答最直接的方法是使用。應(yīng)用場(chǎng)景有興趣可以思考一下,什么場(chǎng)景會(huì)用到這樣的代碼我是在實(shí)現(xiàn)任意類函數(shù)的時(shí)候用到的。

本文沒(méi)什么營(yíng)養(yǎng),只是臨時(shí)用到記錄一下,學(xué)習(xí)的請(qǐng)繞道。

問(wèn)題

簡(jiǎn)而言之,我有一個(gè)類函數(shù):

function F(m, n){
    this.v = m * n;
}
var f = new F(1, 2);

但是我想使用數(shù)組作為參數(shù)表創(chuàng)建實(shí)例,比如:

var f = applyNew(F, [1, 2]);

請(qǐng)問(wèn),applyNew應(yīng)如何實(shí)現(xiàn)?

解答1

最直接的方法是使用 Function.prototype.bind。實(shí)現(xiàn)代碼如下:

function applyNew(ctor, args) {
    var applyArgs = ([{}]).concat(args || []);
    var f = Function.prototype.bind.apply(ctor, applyArgs);

    return new f();
}

注意,([{}]).concat(args || [])這行代碼是因?yàn)?bind 不僅要綁定參數(shù),還要綁定 this,因?yàn)?new 操作會(huì)把心創(chuàng)建的對(duì)象作為 this,所以這里綁定誰(shuí)都無(wú)所謂,隨便分配一個(gè)即可。

解答2

如果不想使用 bind,還可以自己實(shí)現(xiàn):

function applyNew(ctor, args) {
    function F() {
        return ctor.apply(this, args);
    }
    
    F.prototype = ctor.prototype;
    return new F();
}

實(shí)際上這等于自己用閉包實(shí)現(xiàn)了 bind。但是這里有一個(gè)問(wèn)題:如果 ctor 是 String、Array、Date 這樣的 native 類函數(shù),這種方法就不適用了

應(yīng)用場(chǎng)景

有興趣可以思考一下,什么場(chǎng)景會(huì)用到這樣的代碼?我是在實(shí)現(xiàn)任意類函數(shù) mixin 的時(shí)候用到的。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/80277.html

相關(guān)文章

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

    摘要:本文總結(jié)了的各種情況,并從規(guī)范的角度探討了的具體實(shí)現(xiàn),希望對(duì)大家理解有所幫助。規(guī)范規(guī)范里面詳細(xì)介紹了的實(shí)現(xiàn)細(xì)節(jié),通過(guò)閱讀規(guī)范,我們可以更準(zhǔn)確的理解上述四種情況到底是怎么回事。由于本人能力有限,如有理解錯(cuò)誤的地方還望指出。 this是面向?qū)ο缶幊讨械囊粋€(gè)概念,它一般指向當(dāng)前方法調(diào)用所在的對(duì)象,這一點(diǎn)在java、c++這類比較嚴(yán)格的面向?qū)ο缶幊陶Z(yǔ)言里是非常明確的。但是在javascript...

    rottengeek 評(píng)論0 收藏0
  • 如何編寫避免垃圾開銷的實(shí)時(shí)Javascript代碼

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

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

    摘要:利用的一些輔助函數(shù)進(jìn)行類型轉(zhuǎn)換的函數(shù)和復(fù)雜的自定函數(shù)之間有一個(gè)中間段,那就是的一些輔助函數(shù)。這些輔助函數(shù)對(duì)于某些特定數(shù)據(jù)類型的轉(zhuǎn)換非常有用如。 利用Pandas進(jìn)行數(shù)據(jù)分析時(shí),確保使用正確的數(shù)據(jù)類型是非常重要的,否則可能會(huì)導(dǎo)致一些不可預(yù)知的錯(cuò)誤發(fā)生。筆者使用Pandas已經(jīng)有一段時(shí)間了,但是還是會(huì)在一些小問(wèn)題上犯錯(cuò)誤,追根溯源發(fā)現(xiàn)在對(duì)數(shù)據(jù)進(jìn)行操作時(shí)某些特征列并不是Pandas所能處理的...

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

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

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

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

    binta 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

GeekQiaQia

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<