2014-12-27 53 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的右手将永远不会被评估。