Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.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,在myFeature对象的init函数下面有一行$.extend(myFeature.config,config)。我的背景让我想知道为什么这行不是$.extend(this.config,config)?这不是指函数体中的父对象吗 如果不是这样的话,我想如果我理解得足够好,我会使用揭示模块模式,因为我可以做var self=this并在myFeature的整个属性中引用self。我不明白在对象文字模式中,init属性如何访问函数中的myFeature。看起来myFeature是全局范围的,它的

在myFeature对象的init函数下面有一行
$.extend(myFeature.config,config)
。我的背景让我想知道为什么这行不是$.extend(this.config,config)?这不是指函数体中的父对象吗

如果不是这样的话,我想如果我理解得足够好,我会使用揭示模块模式,因为我可以做var self=this并在myFeature的整个属性中引用self。我不明白在对象文字模式中,init属性如何访问函数中的myFeature。看起来myFeature是全局范围的,它的所有属性和它本身都可以被任何人随时访问,我知道这是javascript的本质,我也有点理解,但我认为,暴露模块模式将为我提供私有/公共访问,让我晚上睡得更好

var myFeature = {
    config : {
        wrapper : '#myFeature',
        container : 'div',
        urlBase : 'foo.php?item='
    },

    init : function(config) {
        $.extend(myFeature.config, config);
        $(myFeature.config.wrapper).find('li').
            each(function() {
                myFeature.getContent($(this));
            }).
            click(function() {
                myFeature.showContent($(this));
            });
    },

    buildUrl : function($li) {
        return myFeature.config.urlBase + $li.attr('id');
    },

    getContent : function($li) {
        $li.append(myFeature.config.container);
        var url = myFeature.buildUrl($li);
        $li.find(myFeature.config.container).load(url);
    },

    showContent : function($li) {
        $li.find('div').show();
        myFeature.hideContent($li.siblings());
    },

    hideContent : function($elements) {
        $elements.find('div').hide();
    }
};

$(document).ready(function() { myFeature.init(); });
我想知道为什么
$.extend(myFeature.config,config)
不是
$.extend(this.config,config)
这个
不是指函数体中的父对象吗

是的,因为您正在使用
myFeature.init()调用它,所以它可以工作-请参阅。但是,您可以为安全而冲突-通过明确引用
myFeature
它也允许

$(document).ready(myFeature.init);
我不明白在对象文字模式中,init属性如何访问函数中的myFeature。看起来myFeature是全局范围的,任何人都可以随时访问它的所有属性和它本身

对。
myFeature
变量在全局范围内,甚至可能被完全不同的对象覆盖。重新暴露模块模式将有一个局部作用域
self
变量,无法对其进行操纵

我在想,显示模块模式将为我提供私人/公共访问,让我晚上睡得更好


对。如果您更喜欢它,您应该实现它:-)

如果您愿意,您可以使用this.config。一个非常好的解释正在等待您,[单击此处][1][1]: