Javascript, добавление вещей в фигурные скобки и определения - PullRequest
2 голосов
/ 19 октября 2011

Я нахожусь в процессе модификации этой превосходной библиотеки javascript для автозаполнения ввода html см. Здесь ... так как мне нужно передать некоторые дополнительные параметры для вызова 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, или «добавляет» содержимое myExtra в запрос Ajax, так что эта часть:

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

становится чем-то вроде того, когда myExtra не является пустой или пустой строкой:

  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'

поэтому, пожалуйста, если у вас есть указания для понимания этого, заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 19 октября 2011

Как уже сказал @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 Guide - Работа с объектами .

1 голос
/ 19 октября 2011

Если вы можете использовать jQuery, вы можете использовать метод extend .Чтобы взять ваш пример, вы должны иметь что-то вроде:

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

И тогда в своем методе вы можете сделать:

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

Выбудет использовать значения из finalExtras.

...