2012-04-09 115 views
0

好吧,我承认一开始我在这里有点头痛。Javascript:数组作为对象属性(&ZeroClipboard)

我已经有一些代码工作正常。我创建了一个全局数组变量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'属性?

[哦,之前有人问我为什么不干脆把z1zc,因为它是,那是因为我访问z1来自其他地方的代码,所以我打算进一步方法添加到该对象。 )

+0

感谢所有:)毕竟,即使当它工作在本身它不会做我想要的,因为ZeroClipboard客户端EventListeners没有找到z1数组将文本复制到剪贴板。 C'est la vie :) – Nick 2012-04-09 02:52:50

回答

2

变化z1[r]this.z1[r]

我可能也表明范围将它设置为一个变量,避免查找。

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

zc是一个对象在你的第二个代码块中文字,所以我不认为匿名函数知道该对象的成员(即他们不是在同一个闭合)。而是应该创建一个新的功能:

var ZC = function() { 
    var z1 = []; 
    this.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); 
    }; 
}; 
var _zc = new ZC(); 
_zc.add(); 

这个也保持Z1私人(函数的范围之外无法访问)的优势。

+0

对不起,这是不对的。 – ZenMaster 2012-04-09 02:35:31

+0

什么是不正确的,让我知道,所以我可以修复它。 – 2012-04-09 02:36:39

+0

“所以我不认为匿名函数知道该对象的成员” - 这。或者可能你没有正确地说出来。属于'zc'对象(定义为对象字面量)的'add'函数肯定知道'zc'属性。 “add”属性被赋予一个匿名函数的事实不会改变这一点。 – ZenMaster 2012-04-09 02:37:59

2
  1. 更换z1 OCCURENCES到this.r1
  2. 也许我误解你的努力,但zc也是一个全局变量(似乎)
相关问题