![](/img/trans.png)
[英]Javascript window[“functionName”](arguments) returns “is not a function” TypeError
[英]Uncaught TypeError: is not a function when using window[functionName]
我在這里找到有關從字符串調用函數的頁面 。 底部有一個更新,指出最好使用window[functionName](params)
,並給出以下示例:
var strFun = "someFunction";
var strParam = "this is the parameter";
//Create the function
var fn = window[strFun];
//Call the function
fn(strParam);
所以,我這樣寫:
var OnChange = function( e )
{
var oContainer = _.DOM.GetElementByAttribute( document, 'data-instance', _testInstance );
var evt = ( e ) ? e : window.event;
var objects = GetObjects( oContainer );
var files = [];
if( evt.target.files ) // html5 .. multiple?
{
for( var i = 0; i < evt.target.files.length; i++ )
files.push( evt.target.files[i].name ); // + " (" + Format.Size( evt.target.files[i].size ) + ")" );
}
else
{
files.push( evt.target.value );
}
var strFunc = "User.UploadPicture";
var test = window[strFunc];
test(e); // error
};
我收到以下錯誤:
未捕獲的TypeError:test不是函數
User.Upload
是js文件中的函數。 我想念什么嗎?
假設User
是一個包含函數UploadPicture
的全局范圍對象,則需要這樣調用它:
var test = window["User"]["UploadPicture"];
test(e);
window["User.UploadPicture"]
指的是在window
對象上稱為“ User.UploadPicture”的屬性,與User
對象無關。
但是,在這種情況下,您鏈接到的頁面似乎是在談論調用要在運行時確定名稱的函數。 如果您始終要調用User.UploadPicture
,則直接調用它沒有錯:
User.UploadPicture(e);
如果您在編寫代碼時不知道名稱,則只需要使用其他方法,而是想在運行時動態調用不同的函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.