2015-04-05 27 views
0

我的困惑=對比:在一個對象賦值給一個屬性時設置屬性哪個操作員使用

現在我知道有幾個方法來創建一個對象:

  • 對象文本
  • 對象構造

一個對象文本你可以用 「:」 將值分配給屬性:

var myObject = {firstName:「John」,lastName =「Smith」};

那裏我們使用「:」來設置屬性的值。

我也知道一個函數本身就是一個對象。你可能會暴露公共屬性作爲一個對象的函數的一部分?

那麼,如果你將一個函數分配給一個屬性,你會使用「=」?我假設尚未可是你知道這樣的事情:

var phantom = require('phantom'); 

var World = function World(callback) { 

    phantom.create("--web-security=no", "--ignore-ssl-errors=yes", { port: 12345 }, function (ph) { 
     var phantomProcess = ph; 

     createBrowserPage = function(){ 
      phantomProcess.createPage(function(page) { 

       this.headlessPage = page; 
      }) 
     }; 
    }); 

    callback(); 
}; 

module.exports.World = World; 

我以爲我有,我想通過出口來揭露createBrowserPage這一權利。我不會使用createBrowserPage:並使用「:」而不是「=」將該匿名函數分配給createBrowserPage屬性?

回答

0

=用於分配的JavaScript語句,如:

variable = "foo"; 

:在屬性name: value之間的對象常量聲明被用作:

var obj = { 
    prop1: value1, 
    prop2: value2 
}; 

如果要公開你的createBrowserPage()函數通過導出,你有幾個選項,其中一些涉及到創建一個對象,其中一些涉及到爲對象分配一個屬性。您選擇哪個以及如何聲明它會導致您是否使用:=。這取決於您選擇編寫暴露createBrowserPage()的JavaScript代碼的方式。那裏沒有單一的答案。我會爲你提供一些選擇。

如果在一個聲明中,你想一個新的屬性分配給出口對象,那麼你可以使用=這樣的:

module.exports.myFunc1 = myLocalFunction1; 

如果在一個聲明中,要分配所有的出口功能,那麼你會分配一個與=分配一個對象,但在這樣的對象的聲明中:

module.exports = { 
    myFunc1: myLocalFunction1, 
    myfunc2: myLocalFunction2 
}; 

在第一個例子,要添加一個新的屬性到出口對象併爲該屬性賦值。

在第二個示例中,您聲明瞭一個新的Javascript文字對象(使用prop: value語法聲明其屬性。然後,您將該整個對象分配給module.exports,該對象實際上用一個新對象代替了整個現有對象exports,並且此新對象具有兩個屬性。

+0

OMG你只是闡明一些主要的輕型,幫助我。謝謝 – PositiveGuy 2015-04-05 07:46:55

+0

你也可以做module.exports = {myFunc1:function(){... code here},myFunc2:function(){... code here}};並在對象文字中分配匿名函數?我假設答案還沒有。 – PositiveGuy 2015-04-05 07:48:16

+0

所以還有第三種選擇。比方說,你做了module.exports.myFunc1 = someOtherVariable其中myFunc1是對出口的-existing-方法對象,在這裏你要覆蓋一個方法,並改寫你的someOtherVariable該方法。換句話說,你可以更新/覆蓋--existing-屬性或方法=太正確? – PositiveGuy 2015-04-05 07:51:16

0

你的問題是有點混亂,但如果你有興趣的:=的確切含義和語法是這樣的:

冒號(:)符號操作,它是litteral object notation語法的一部分,並從他們(任何表達式)分隔屬性名稱(一個litteral字符串或簡單的標識符)。冒號只用於上下文中並作爲三元條件運算符的一部分(?:)。

當且僅當{不是指令中的第一個字符(否則它定義了一個塊)並且不遵循function表達式或聲明時,大括號內的內容被解析爲litteral對象。

賦值運算符(=spec)是一個二進制運算符,它可以以任何表達式,只要其左操作數是一個有效的左手側的表達中使用,並且它返回的值右操作數。除非使用嚴格模式,否則將無法爲只讀屬性分配值。

+0

謝謝,其他人給了我更多,併爲我解答更清楚,但謝謝你的答案。 – PositiveGuy 2015-04-05 07:57:23

+0

也是嚴格模式下的行爲發生的有效和非嚴格的好點。 – PositiveGuy 2015-04-05 07:57:56