【问题标题】:Javascript, adding things in curly bracket and definitionJavascript,在大括号和定义中添加内容
【发布时间】:2011-10-19 08:18:57
【问题描述】:

我正在修改这个出色的 javascript 库以自动完成 html 输入 see here... 因为我需要将一些额外参数传递给 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'

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

【问题讨论】:

标签: javascript curly-brackets


【解决方案1】:

正如@Matt 在他的评论中所说,这对花括号是一个 object literal 并创建一个对象。是一样的

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 Guide - Working with Objects

【讨论】:

    【解决方案2】:

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

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

    然后在你的方法中你可以这样做:

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

    然后您将使用来自finalExtras 的值。

    【讨论】:

    • 包含整个 jQuery 库来执行一项任务,一个简单的for 循环对我来说可能有点过分了。
    • 如果您还没有使用 jQuery,那么可以。然而,它并没有阻止人们查看 jQuery 并将代码用于扩展。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-19
    • 1970-01-01
    • 2019-02-22
    • 2022-11-19
    相关资源
    最近更新 更多