好吧,我一开始就承认我有点头疼。

我有一些工作正常的代码。我创建了一个全局数组变量z1=[];,然后使用带有以下代码的唯一引用键r将ZeroClipboard对象存储在数组中。 (这本身可能是邪恶的,但确实有效。)

function zc(r){
    var a="RP"+r,b="RDC"+r,c="RP"+r;
    z1[r]=new ZeroClipboard.Client();
    z1[r].addEventListener('mouseDown',function(client){z1[r].setText(document.getElementById(c).innerHTML);});
    z1[r].addEventListener('complete',function(client,text){$('#'+a).aH("#D6EBFF",1000);});
    z1[r].glue(a,b);}


最近,我意识到将z1作为全局变量是多么迫切的邪恶,所以我试图修补自己的方式并创建一个对象来约束整个业务。但这不起作用...

我已经完成以下工作:

var zc={
    z1: [],

    add:function(r){
        var a="RP"+r,b="RDC"+r,c="RP"+r;
        z1[r]=new ZeroClipboard.Client();
        z1[r].addEventListener('mouseDown',function(client){z1[r].setText(document.getElementById(c).innerHTML);});
        z1[r].addEventListener('complete',function(client,text){$('#'+a).aH("#D6EBFF",1000);});
        z1[r].glue(a,b);}
}


我现在像以前一样调用zc.add(r)而不是zc(r)

我收到的Firebug错误是z1 is not defined。为什么我的'add'方法看不到我的'z1'属性?

[哦,在有人问我为什么不直接将z1放在zc之前,这是因为我从代码中的其他地方访问了z1,所以我将在其中添加更多方法。宾语。)

最佳答案

z1[r]更改为this.z1[r]

我可能还会建议在范围内将其设置为变量以避免查找。

var zr = this.z1[r] = new ZeroClipboard.Client();
zr.addEventListener()

关于javascript - Javascript:将数组作为对象属性(和ZeroClipboard),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10068287/

10-09 16:40