0

即使我使用命名空间,函数名称也是混合的。在下面的示例中,当我调用 或nwFunc.callMe()它将$.Test1.callTest()执行_testFunction(). doOneThing我希望$.Test1.callTest()调用API 而_testFunction()不是. 我需要做什么来纠正它?$.Test1doOneThing

例子:

var doOneThing = function() {
    _testFunction= function() {
        ...
    }

    return {
         // public 
         callMe: function(){
        _testFunction();
         }
    }
}

var nwFunc = doOneThing();
nwFunc.callMe();
$.Test1.callTest();

下面是一个示例 API

jQuery.Test1 = (function(){

    _testFunction= function() {
        ...// do differently
    }


    return {
        // public
        callTest: function(){
            _testFunction()
        }
    }
}(jQuery))
4

2 回答 2

5

您不在对象文字中,而是在函数体中。

_testFunction: function() {
    .... // do differently
}

不是对象属性,而是前面有标签的匿名函数表达式,并且由于未在任何地方分配而立即被遗忘。改为简单的函数声明:

function _testFunction() {
    .... // do differently
}

return {
     // public 
     callMe() {
         _testFunction();
     }
}

只是一个语法错误,在这里你需要对象文字 sytnax

return {
    // public
    callTest: function() {
        _testFunction()
    }
};

或者

return {
    // public
    callTest: _testFunction // exporting the function directly
};

当我打电话nwFunc.callMe()$.Test1.callTest()它将执行_testFunction(). doOneThing我需要做什么来纠正它?

您必须使用var声明_testFunction变量放在本地范围内。当前,您正在写入全局范围,其中仅_testFunction存在一个(当前doOneThing您正在覆盖_testFunctionfrom jQuery.Test1,并且两个callTest函数都将调用新的)。函数声明也可以解决这个问题(使用本地范围),它类似于 var statement + function expression

于 2013-07-01T01:27:51.967 回答
3

您正在稍微混淆您的语法。您在最初声明函数时使用对象文字表示法,而在实际创建对象时使用函数声明表示法,因此您应该切换两者:

jQuery.Test1 = (function(){

    function _testFunction() {
        .... // do differently
    }

    return {
        // public
        callTest: _testFunction
    }
}(jQuery))
于 2013-07-01T01:28:50.367 回答