Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:数组作为对象属性(&;ZeroClipboard)_Javascript_Arrays_Object_Properties - Fatal编程技术网

Javascript:数组作为对象属性(&;ZeroClipboard)

Javascript:数组作为对象属性(&;ZeroClipboard),javascript,arrays,object,properties,Javascript,Arrays,Object,Properties,好吧,我承认一开始我有点不知所措 我有一些代码工作得很好。我创建了一个全局数组变量z1=[]然后使用唯一引用键r和以下代码将ZeroClipboard对象存储在数组中。(这本身可能是邪恶的,但它起了作用。) 我最近意识到,将z1作为一个全局变量是多么邪恶,所以我正试图改变我的方式,创建一个对象来约束整个业务。但它不起作用 我已经做了以下工作: var zc={ z1: [], add:function(r){ var a="RP"+r,b="RDC"+r,c="

好吧,我承认一开始我有点不知所措

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

我最近意识到,将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
。为什么我的
'add'
方法看不到我的
'z1'
属性


[哦,在有人问我为什么不把
z1
放在
zc
中之前,这是因为我从代码中的其他地方访问
z1
,所以我要向对象添加更多的方法。)

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

我还建议将其设置为范围中的变量,以避免查找

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

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

我还建议将其设置为范围中的变量,以避免查找

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

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保持私有(在函数的作用域之外无法访问)。

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私有(在函数范围之外无法访问)的优点

  • 将出现的
    z1
    替换为
    this.r1
  • 也许我误解了你的努力,但是
    zc
    也是一个全局变量(似乎)
  • 将出现的
    z1
    替换为
    this.r1
  • 也许我误解了你的努力,但是
    zc
    也是一个全局变量(似乎)

  • “所以我认为匿名函数不知道该对象的成员”-这可能是因为您没有正确地表达它。
    添加属于
    zc
    对象(定义为对象文字)的函数大多数人肯定知道
    zc
    属性。
    add
    属性被分配了一个匿名函数这一事实并没有改变这一点。是的,我试图在paren中澄清这一点(它们不共享相同的闭包)。它仍然可以通过上下文访问成员(此),但这是唯一的方法,对吗?我不确定我是否理解你所说的“这是唯一的方法”是什么意思。作为任何函数,它也可以访问其定义范围内的所有变量,将其简化一点。我的意思是,如果通过回调调用同一个函数,从而更改add()的上下文然后使用
    this
    调用将失败,因为它不再指向
    zc
    文本。“因此我认为匿名函数不知道该对象的成员”-这一点。或者可能是您没有正确使用它。
    添加属于
    zc
    对象(定义为对象文本)的
    函数大多数人肯定知道
    zc
    属性。
    add
    属性被分配了一个匿名函数这一事实并没有改变这一点。是的,我试图在paren中澄清这一点(它们不共享相同的闭包)。它仍然可以通过上下文访问成员(此),但这是唯一的方法,对吗?我不确定我是否理解你所说的“这是唯一的方法”是什么意思。作为任何函数,它也可以访问其定义范围内的所有变量,将其简化一点。我的意思是,如果通过回调调用同一个函数,从而更改add()的上下文然后使用
    调用此
    将失败,因为它不再指向
    zc
    文本。谢谢,全部:)毕竟,即使它本身工作,它也不会做我希望它做的事情,因为ZeroClipboard客户端事件侦听器找不到z1数组来将文本复制到剪贴板。C'est la vie:)谢谢,全部:)毕竟这是因为,即使它本身可以工作,它也不会做我希望它做的事情,因为ZeroClipboard客户端EventListeners找不到z1数组来将文本复制到剪贴板。C'est la vie:)