多次调用对象

时间:2011-11-08 08:53:35

标签: javascript

您好我有代码替换document.write,创建缓冲区而不是将缓冲区推送到文档中:

  var lazyLoad = {

    url: '',
    block: '',
    buffer: '',

    init: function(url,block){
        that = this
        that.url = url;
        that.block = block;

        console.info(this.block)
        console.log(this.url)

        window.d = document
        window.onload = function(){
            that.work()
        }   
    },

    work: function(){
        that = this
        d.write = d.writeln = function(s){ 
                                    that.buffer += s
                                }
        d.open = d.close = function(){}
        s = d.createElement('script');       
        s.setAttribute('type','text/javascript');
        s.setAttribute('src',that.url);
        d.getElementById(that.block).appendChild(s)
        s.onload = function () {
            window.setTimeout(function() {

                console.warn(that.block + ' ' +that.buffer)
                d.getElementById(that.block).innerHTML += that.buffer;
                that.buffer = '';
            }, 0);
       }
    }
}

如果我开始一次:

lazyLoad.init(
        'http://test.com/test.js',              
         div1
)

但如果我再次使用其他参数调用它:

lazyLoad.init(
        'http://test2.com/test.js',             
         div2
)

第一个init不会工作。 window.buffer将为空。我的错误在哪里?

P.S。另一个问题:我试图用jQuery方法window.onload替换$(window).load(),但它会触发两次。我该如何解决?

1 个答案:

答案 0 :(得分:2)

基本上,你只有一个缓冲区: window.buffer ,如果你两次调用 init(),window.buffer将被第二次调用操纵,而第一个电话可能无法完成。 我建议你为每个init()使用一个单独的缓冲区。这基本上可以避免这个问题。

关于第二个问题,

window.onload != $(window).load()

window.onload只会执行你最后分配给它的方法,而$(window).load()维护一个链,你可以 init()两次,然后有两个方法链条。