JavaScript error: “is not a function”

前端 未结 3 1190
太阳男子
太阳男子 2020-12-03 13:18

It looks like \"$smth is not a function\" is a very common problem with JavaScript, yet after looking through quite a few threads I still cannot understand what is causing i

相关标签:
3条回答
  • 2020-12-03 13:51

    Your LMSInitialize function is declared inside Scorm_API_12 function. So it can be seen only in Scorm_API_12 function's scope.

    If you want to use this function like API.LMSInitialize(""), declare Scorm_API_12 function like this:

    function Scorm_API_12() {
    var Initialized = false;
    
    this.LMSInitialize = function(param) {
        errorCode = "0";
        if (param == "") {
            if (!Initialized) {
                Initialized = true;
                errorCode = "0";
                return "true";
            } else {
                errorCode = "101";
            }
        } else {
            errorCode = "201";
        }
        return "false";
    }
    
    // some more functions, omitted.
    }
    
    var API = new Scorm_API_12();
    
    0 讨论(0)
  • 2020-12-03 13:57

    For more generic advice on debugging this kind of problem MDN have a good article TypeError: "x" is not a function:

    It was attempted to call a value like a function, but the value is not actually a function. Some code expects you to provide a function, but that didn't happen.

    Maybe there is a typo in the function name? Maybe the object you are calling the method on does not have this function? For example, JavaScript objects have no map function, but JavaScript Array object do.

    Basically the object (all functions in js are also objects) does not exist where you think it does. This could be for numerous reasons including(not an extensive list):

    • Missing script library
    • Typo
    • The function is within a scope that you currently do not have access to, e.g.:

    var x = function(){
       var y = function() {
          alert('fired y');
       }
    };
        
    //the global scope can't access y because it is closed over in x and not exposed
    //y is not a function err triggered
    x.y();

    • Your object/function does not have the function your calling:

    var x = function(){
       var y = function() {
          alert('fired y');
       }
    };
        
    //z is not a function error (as above) triggered
    x.z();

    0 讨论(0)
  • 2020-12-03 14:16

    I also hit this error. In my case the root cause was async related (during a codebase refactor): An asynchronous function that builds the object to which the "not a function" function belongs was not awaited, and the subsequent attempt to invoke the function throws the error, example below:

    const car = carFactory.getCar();
    car.drive() //throws TypeError: drive is not a function
    

    The fix was:

    const car = await carFactory.getCar();
    car.drive()
    

    Posting this incase it helps anyone else facing this error.

    0 讨论(0)
提交回复
热议问题