2014-12-27 90 views
0

我正在研究一個問題集,我想在其中設置選項而無需發送所有參數。我有大部分工作,但想知道是否可以設置默認選項,即使沒有設置爲屬性,它會自動成爲對象的一部分?這裏是我的例子,你會看到我有一個門的默認選項,但它不顯示在myCar對象中。我感謝我在這裏做錯了任何解釋,以及如何使它正常工作。JavaScript對象選項

CarPrototype = function(options) { 
    var options = options || {}; 

    name = options.name; 
    year = options.year; 
    doors = 4 || options.doors; 
    make = options.make; 

    return options; 

} 

var myCar = CarPrototype({ 
    name: 'Ferarri', 
    year: 1975, 
    make: 'f50' 
}}; 

console.log(myCar); // was hoping that doors would be part of this with default? 

console.log(myCar.doors); // nothing returned :-(
+0

options.doors只會在4返回false時執行,而這絕不會是這種情況。 – Trace 2014-12-27 20:05:33

+0

除了那些已經指出的錯誤外,還有一個錯誤:}};應該 }); – user1702401 2014-12-27 20:12:02

回答

3

這句法無效:

var options = options | {}; 

使用或操作,||,而不是:

function Car (options) { 
    var options = options || {}; 

    this.name = options.name; 
    this.year = options.year; 
    this.doors = options.doors || 4; 
    this.make = options.make; 

} 
var car = new Car({name:'vanquish'}); 
#=> Car {name: "vanquish", year: undefined, doors: 4, make: undefined} 
+0

這對我非常有幫助。我忘了我需要這個新的對象來引用CarPrototype。我相信我說得對。一旦我做了這個改變,它很好用 – pertrai1 2014-12-27 20:15:38

+0

@ pertrai1沒問題! – agconti 2014-12-27 20:16:07

2
doors = 4 || options.doors 

應該

doors = options.doors || 4 

表達式從左向右讀取。如果左手返回true,OR的右手將永遠不會被評估。