Javascript 具有不同参数的Init对象

Javascript 具有不同参数的Init对象,javascript,Javascript,我有一个对象,我在页面中多次调用它,但参数不同 var lazyLoad = (function () { var CONFIG = { block: '', url: '' } function work(){ window.d = document var buffer = '' d.write = d.writeln = function(s){ buffer

我有一个对象,我在页面中多次调用它,但参数不同

var lazyLoad = (function () {

    var CONFIG = {
        block: '',
        url: ''
    }

    function work(){            
        window.d = document
        var buffer = ''
        d.write = d.writeln = function(s){ buffer += s }
        d.open = d.close = function(){}
        s = d.createElement('script') 
        s.setAttribute('type','text/javascript')
        s.setAttribute('src',CONFIG.url)
        d.getElementById(CONFIG.block).appendChild(s)
        s.onload = function () {
            window.setTimeout(function() {
                console.warn(CONFIG.block + ' ' + buffer)
                d.getElementById(CONFIG.block).innerHTML += buffer
                buffer = ''
            }, 0)
       }
    }

    return {
            init: function (options) {
                $.extend(CONFIG, options);

                random = $('#'+CONFIG.block).attr('rel')
                id = $('#'+CONFIG.block).attr('id').replace(random,'')
                id = id.replace('DIV','')
                size = id.split('X')
                ele_width = size[0] || CONFIG.width
                ele_height = size[1] || CONFIG.height

                $('#'+CONFIG.block).css({
                                            'width':ele_width+'px',
                                            'height':ele_height+'px',
                                            'background':'url(/static/i/ajax-loading-black.gif) no-repeat center center'
                                        })

                console.log(CONFIG.block)
                $(window).load(function(){

                        work()

                })
            }

    }

})();
我这样称呼它:

lazyLoad.init({
            url: 'http://example.com/test1.js',
            block: DIVID1
        })

除此之外:

lazyLoad.init({
            url: 'http://testdomain.com/test3.js',
            block: DIVID3
        })

加载文档后,我看到每个
div
都有宽度和高度,这与此脚本一起应用,但
buffer
仅插入到最后一个
div

问题在于
CONFIG
是在外部函数中声明的,因为javascript在调用
work
函数时都是单线程的(忽略这里的WebWorkers=)。
CONFIG
中的值是正确的。但由于每次执行
$.extend(配置,选项)
在触发
s.onload
时更改同一对象
CONFIG.block
中剩余的值是最后使用的值。尝试:

var lazyLoad = (function () {

    //var CONFIG = {
    //    block: '',
    //    url: ''
    //}

    function work(options){
        window.d = document
        var buffer = ''
        d.write = d.writeln = function(s){ buffer += s }
        d.open = d.close = function(){}
        s = d.createElement('script') 
        s.setAttribute('type','text/javascript')
        //s.setAttribute('src',CONFIG.url)
        //d.getElementById(CONFIG.block).appendChild(s)
        s.setAttribute('src',options.url)
        d.getElementById(options.block).appendChild(s)
        s.onload = function () {
            window.setTimeout(function() {
                //console.warn(CONFIG.block + ' ' + buffer)
                //d.getElementById(CONFIG.block).innerHTML += buffer
                console.warn(options.block + ' ' + buffer)
                d.getElementById(options.block).innerHTML += buffer
                buffer = ''
            }, 0)
       }
    }

    return {
            init: function (options) {            
                var CONFIG = {
                    block: '',
                    url: ''
                }
                $.extend(CONFIG, options);

                random = $('#'+CONFIG.block).attr('rel')
                id = $('#'+CONFIG.block).attr('id').replace(random,'')
                id = id.replace('DIV','')
                size = id.split('X')
                ele_width = size[0] || CONFIG.width
                ele_height = size[1] || CONFIG.height

                $('#'+CONFIG.block).css({
                                            'width':ele_width+'px',
                                            'height':ele_height+'px',
                                            'background':'url(/static/i/ajax-loading-black.gif) no-repeat center center'
                                        })

                console.log(CONFIG.block)
                $(window).load(function(){

                        //work()
                        work(CONFIG)

                })
            }

    }

})();
var lazyLoad = (function () {

    //var CONFIG = {
    //    block: '',
    //    url: ''
    //}

    function work(options){
        window.d = document
        var buffer = ''
        d.write = d.writeln = function(s){ buffer += s }
        d.open = d.close = function(){}
        s = d.createElement('script') 
        s.setAttribute('type','text/javascript')
        //s.setAttribute('src',CONFIG.url)
        //d.getElementById(CONFIG.block).appendChild(s)
        s.setAttribute('src',options.url)
        d.getElementById(options.block).appendChild(s)
        s.onload = function () {
            window.setTimeout(function() {
                //console.warn(CONFIG.block + ' ' + buffer)
                //d.getElementById(CONFIG.block).innerHTML += buffer
                console.warn(options.block + ' ' + buffer)
                d.getElementById(options.block).innerHTML += buffer
                buffer = ''
            }, 0)
       }
    }

    return {
            init: function (options) {            
                var CONFIG = {
                    block: '',
                    url: ''
                }
                $.extend(CONFIG, options);

                random = $('#'+CONFIG.block).attr('rel')
                id = $('#'+CONFIG.block).attr('id').replace(random,'')
                id = id.replace('DIV','')
                size = id.split('X')
                ele_width = size[0] || CONFIG.width
                ele_height = size[1] || CONFIG.height

                $('#'+CONFIG.block).css({
                                            'width':ele_width+'px',
                                            'height':ele_height+'px',
                                            'background':'url(/static/i/ajax-loading-black.gif) no-repeat center center'
                                        })

                console.log(CONFIG.block)
                $(window).load(function(){

                        //work()
                        work(CONFIG)

                })
            }

    }

})();