2011-10-19 12 views
2

我正在修改這個優秀的JavaScript庫,用於自動完成html輸入see here ...因爲我需要通過一些extraparameters到Ajax調用。其實我正在尋找一些非破壞性的東西,以便它可以管理這個庫的默認行爲,也可以處理「沒有額外參數」。Javascript中,添加東西在大括號和定義

,所以我想我會用一個空測試myExtra像

myExtra = {b : 'b', c: 'c'} 
// or maybe a thing like myExtra = "{b : 'b', c: 'c'}" 
myAutoComplete = new Autocomplete('query', { serviceUrl:'autoComplete.rails'}, 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' 

所以請,如果您有理解這個任意球,謝謝你在前進。

+1

大括號使用** [Object Literals](http://www.dyn-web.com/tutorials/obj_lit.php)定義一個'Object' ** – Matt

回答

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

1

如果您能夠使用jQuery,您可以使用extend方法。把你的例子中,你會碰到這樣的:

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

然後在你的方法,你可以這樣做:

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

你會再使用值從finalExtras

+0

包括整個jQuery庫來執行任務a簡單的'for'循環可以做到尖叫對我來說過分。 – Matt

+0

如果你還沒有使用jQuery,那麼是的。然而,它並不會阻止某人看着jQuery並將代碼用於擴展。 – Steve