Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法使用命名空间、模块化、专用的选择器作为目标_Javascript_Jquery - Fatal编程技术网

Javascript 无法使用命名空间、模块化、专用的选择器作为目标

Javascript 无法使用命名空间、模块化、专用的选择器作为目标,javascript,jquery,Javascript,Jquery,我试图通过在脚本中使用名称空间并使函数私有化来定位jquery选择器,但我认为我仍然缺少一些东西,有人可以指导吗。如果我尝试在最后一行添加一个断点,然后使用devtools访问MyUtility.Selectors.ColorCss.myBorder() 选择器 首先 第二 第三 var customModule=(函数(){ var MyUtility={ 选择器:{ ColorCss:function(){ var myBorder=函数(){ $('li').css('color',

我试图通过在脚本中使用名称空间并使函数私有化来定位jquery选择器
  • ,但我认为我仍然缺少一些东西,有人可以指导吗。如果我尝试在最后一行添加一个断点,然后使用devtools访问MyUtility.Selectors.ColorCss.myBorder()

    
    选择器
    
      首先
    • 第二
    • 第三
    var customModule=(函数(){ var MyUtility={ 选择器:{ ColorCss:function(){ var myBorder=函数(){ $('li').css('color','red')) console.log('hello') } 返回{ 我的边界:我的边界 } }() } } }())
    正如您所说的
    如果我尝试在最后一行添加断点,然后使用devtools访问MyUtility.Selectors.ColorCss.myBorder()

    这是您的代码:

    var customModule = (function () {
        var MyUtility = {
              Selectors: {
                ColorCss: function(){
                       var myBorder = function(){ 
                            $('li').css('color', 'red');
                            console.log('hello');
                       }
                       return{ myBorder: myBorder }
                }()
              } // Selectors
        } // MyUtility
    }())
    
    上面的代码可以写成:

    function myBorderFunc() { $('li').css('color', 'red'); console.log('hello');}
    var selectorObj = { ColorCss : function(){ return{ myBorder: myBorderFunc } }()};
    var MyUtility = { Selectors: selectorObj};
    var customModule = ( function(){ MyUtility }() );
    
    这说明了问题所在

  • var customModule
    是一个不返回任何内容的函数表达式,因此它是
    未定义的
  • 由于
    customModule
    未定义,因此不能使用customModule.MyUtility
  • 正如您所说,您可以调用
    MyUtility.Selectors.ColorCss.myBorder()
    ,因为
    MyUtility
    是一个具有属性
    Selectors
    的对象
  • 您可以使用以下示例进行测试:

    // undefined since nothing is returned
    var bar = (function(){ {Foo: "i am foo"} }()); 
    
    // returns foo and can be used bar.Foo ---> "i am foo"
    var bar = (function(){ return {Foo: "i am foo"} }()); 
    
    要“修复您的代码”,请返回
    MyUtility

    var customModule = (function () {
        var MyUtility = {
              Selectors: {
                ColorCss: function(){
                       var myBorder = function(){ 
                            $('li').css('color', 'red');
                            console.log('hello');
                       }
                       return{ myBorder: myBorder }
                }()
              } // Selectors
        } // MyUtility
        return MyUtility;
    }())
    
    这样,您可以像这样访问它
    customModule.Selectors.ColorCss.myBorder()


    更多关于

    的信息,只是试图理解名称空间、私有等的概念-但它不应该工作吗?javascript中没有私有或公共方法,只有作用域。@adeneo:即使Crockford将它们称为私有,它们实际上也不是,只是变量超出了范围。@Purefan-你读过我的想法:)太好了:)非常感谢=>返回MyUtility=>customModule.Selectors.ColorCss.myBorder()
    var customModule = (function () {
        var MyUtility = {
              Selectors: {
                ColorCss: function(){
                       var myBorder = function(){ 
                            $('li').css('color', 'red');
                            console.log('hello');
                       }
                       return{ myBorder: myBorder }
                }()
              } // Selectors
        } // MyUtility
        return MyUtility;
    }())