Javascript 使用不同的参数初始化对象

Javascript 使用不同的参数初始化对象,javascript,Javascript,您好,我有替换文档的代码。编写,生成缓冲区,然后将缓冲区推入文档: var lazyLoad = (function () { var counter = 0 var buffer = new Array() function work(options){ window.d = document var tmp_buffer d.write = d.writeln = function(s){ tmp_bu

您好,我有替换
文档的代码。编写
,生成缓冲区,然后将缓冲区推入文档:

 var lazyLoad = (function () {

    var counter = 0
    var buffer = new Array()
    function work(options){ 
        window.d = document     
        var tmp_buffer
        d.write = d.writeln = function(s){  tmp_buffer += s}

        d.open = d.close = function(){}
        s = d.createElement('script') 
        s.setAttribute('type','text/javascript')
        s.setAttribute('src',options.url)
        d.getElementById(options.block).appendChild(s)

        s.onload = function () {
            buffer[counter] = tmp_buffer
            console.log(buffer[1])
            window.setTimeout(function() {
                d.getElementById(options.block).innerHTML += buffer[counter]            
            }, 0)
            counter++
       }
    }

    return {

            init: function (options) {

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

                $.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'
                                    })


                $(window).load(function(){
                    if(options.adfox) {
                        random = $('#'+CONFIG.block).attr('id')
                        AdFox_getCodeScript(1, random, CONFIG.url)
                    }else{
                        work(options)
                    }
                })
            }

    }


})();
如果我初始化它一次:

lazyLoad.init({
        'http://test.com/test.js',              
         div1
})
但如果我用其他参数再次调用它:

lazyLoad.init({
        'http://test2.com/test.js',             
         div2
})
首先,它不起作用<代码>缓冲区
将为空。我的错在哪里

我认为

$(window).load(function(){  
将覆盖事件处理程序。尝试使用:

$(function(){ 

 });
相反。我认为它将添加一个事件处理程序数组。不过我可能错了。请告诉我结果如何


而且,看起来您并不是在本地范围中定义“s”。如果在定义变量时不将“var”放在变量前面,它将在全局范围内创建。

Hi。你不应该传递一个对象文本
{url:'http://test.com/test.js,block:div1}
作为init()函数的参数?你有什么错误吗?你什么时候调用init()?不幸的是,它没有帮助。你能公开一个url以便我能看到整个上下文吗?我想问题在于tmp_缓冲区。当您在第二个闭包(在s.onload函数中)中使用它时,它将覆盖第一个闭包。是否可以尝试将tmp_buffer.divid.value而不仅仅是tmp_buffer变量?也就是说,为每个“onload”回调创建一个序列化变量。因此,当s.onload回调最终被调用时,它引用正确的tmp_缓冲区数据。。。想象一下,当您设置s.src变量时,它会异步调用以检索该javascript文件。。。说那个电话需要100毫秒。。。当调用返回时,第二个事件处理程序已经附加了事件处理程序。。。因此,在调用第一个s.onload之前,第一个事件处理程序中的tmp_缓冲区已经被第二个tmp_缓冲区覆盖了……让我们来看看