摘要:?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
摘要:本文總結(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...
摘要:在語(yǔ)言中我們很難完全避免垃圾開銷。它的垃圾收集模式在根本上是不符合像游戲這樣的實(shí)時(shí)軟件需求的。此外,在所有可能的情況下避免向量對(duì)象如中的和屬性。 在 Javascript 語(yǔ)言中我們很難完全避免垃圾開銷。它的垃圾收集模式在根本上是不符合像游戲這樣的實(shí)時(shí)軟件需求的。在這篇文章中我們主要介紹了一些關(guān)于 javascript 垃圾回收的方法。 編輯于 2012 年 3 月 27 日: 哇,這...
摘要:利用的一些輔助函數(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所能處理的...
摘要:一上瀏覽器使用不允許事件代理到上選擇器以上綁定可能會(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(){}); 以上綁定可能...
摘要:一上瀏覽器使用不允許事件代理到上選擇器以上綁定可能會(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(){}); 以上綁定可能...
閱讀 2569·2023-04-25 20:05
閱讀 2891·2023-04-25 17:56
閱讀 2207·2021-10-14 09:49
閱讀 2689·2019-08-29 15:10
閱讀 2928·2019-08-29 12:25
閱讀 425·2019-08-28 18:23
閱讀 763·2019-08-26 13:26
閱讀 1376·2019-08-23 18:21