簡體   English   中英

未捕獲的TypeError:使用window [functionName]時不是函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM