JavaScript表示没有定义由另一个调用的编程函数

时间:2016-11-25 10:55:45

标签: javascript

在Ionic-app中,我的一个JavaScript函数出现了问题,这个函数被另一个函数调用。 我总是得到一个错误,没有定义函数getSqlSelect。 但是这些函数都在services.js脚本中定义。

这是来自services.js的简短版本代码:

.factory('LocalDatabase', function () {
    var arrResult = "";

    return {
        select: function (table, filterAttributesArr, success) {
            var sql = getSqlSelect(table, filterAttributesArr);
            var db = window.sqlitePlugin.openDatabase({ name: 'p16.sqlite', location: 0 });
        },
        getSqlSelect: function (tablename, filterAttributesArr) {
            return "";
        }

    };
})

1 个答案:

答案 0 :(得分:0)

那是因为您在该位置的范围内没有getSqlSelect变量。 如果<{strong> select被称为obj.select(...),其中obj是回调工厂返回的对象,那么您可以使用this.getSqlSelect(...)来引用它。 E.g。

var sql = this.getSqlSelect(table, filterAttributesArr);
//        ^^^^^

如果使用正确的select调用this ,则无法正常工作。如果您不需要公开它,只需在回调中定义它:

.factory('LocalDatabase', function () {
    var arrResult = "";

    function getSqlSelect(tablename, filterAttributesArr) {
        return "";
    }

    return {
        select: function (table, filterAttributesArr, success) {
            var sql = getSqlSelect(table, filterAttributesArr);
            var db = window.sqlitePlugin.openDatabase({ name: 'p16.sqlite', location: 0 });
        }
    };
})

如果select没有使用正确的this进行调用而您执行需要公开getSqlSelect,那么您也可以这样做:

.factory('LocalDatabase', function () {
    var arrResult = "";

    function getSqlSelect(tablename, filterAttributesArr) {
        return "";
    }

    return {
        select: function (table, filterAttributesArr, success) {
            var sql = getSqlSelect(table, filterAttributesArr);
            var db = window.sqlitePlugin.openDatabase({ name: 'p16.sqlite', location: 0 });
        },
        getSqlSelect: getSqlSelect
    };
})