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