2

我正在修改这个用于自动完成 html 输入的优秀 javascript 库,请参见此处……因为我需要将一些额外参数传递给 Ajax 调用。实际上我正在寻找一些非破坏性的东西,以便它可以管理这个库的默认行为,它也能够处理“无额外参数”。

所以我想我会打个电话

myExtra = {b : 'b', c: 'c'} 
// or maybe a thing like myExtra = "{b : 'b', c: 'c'}" 
myAutoComplete = new Autocomplete('query', { serviceUrl:'autoComplete.rails'}, myExtra);

对 myExtra 进行 null 测试,如果 null 或将 myExtra 的内容“添加”到 Ajax 请求中,则不执行任何操作,因此这部分:

  new Ajax.Request(this.serviceUrl, {
    parameters: { query: this.currentValue , },
    onComplete: this.processResponse.bind(this),
    method: 'get'
  });

当 myExtra 不是 null 或空字符串时变成这样:

  new Ajax.Request(this.serviceUrl, {
    parameters: { query: this.currentValue , b: 'b', c: 'c'},
    onComplete: this.processResponse.bind(this),
    method: 'get'
  });

由于我是网络开发的新手,我的问题是我不知道如何将花括号内容{}添加到另一个内容中(而且我不确定我是否完全理解这些 {}...)

我想我想做 Python 接受的这个王者,但我只是不知道 Javascript 是如何做到的,

 >>> class A:
def __init__(self, data):
    self.data = data
 >>> a = A("my data")
 >>> dir(a)
 ['__doc__', '__init__', '__module__', 'data']
 >>> myExtra = "b='b';c='c'"
 >>> for x in myExtra.split(";"):
    var, value = x.split('=')
        setattr(a, var, value)

 >>> dir(a)
 ['__doc__', '__init__', '__module__', 'b', 'c', 'data']
 >>> print a.data, a.b, a.c
 my data 'b' 'c'

所以,如果您有任何理解这一点的指示,请提前谢谢您。

4

2 回答 2

2

正如@Matt 在他的评论中已经说过的那样,这对花括号是一个对象文字并创建了一个对象。它与

var myExtra = new Object();
myExtra.b = 'b';
myExtra.c = 'c';

但更简洁和创建对象的首选方式。

我认为您想要做的是将属性从一个对象复制到另一个对象。for...in 您可以通过使用[MDN]循环遍历一个对象的所有属性来做到这一点:

var a = {query: this.currentValue};
var b = {b : 'b', c: 'c'};

for(var prop in b) {
    if(b.hasOwnProperty(prop) { // safe guard (might not be necessary)
        a[prop] = b[prop];
    }
}

要了解有关对象的更多信息,请查看MDN JavaScript 指南-使用对象

于 2011-10-19T08:32:05.950 回答
1

如果你能够使用 jQuery,你可以使用extend方法。举个例子,你会有类似的东西:

var myDefaultExtras = { b: 'b', c: 'c' };

然后在您的方法中,您可以执行以下操作:

var finalExtras = $.extend({}, myDefaultExtras, extras);

然后,您将使用 中的值finalExtras

于 2011-10-19T08:30:38.973 回答