我正在设置一个对象构造函数,并希望将键/值对象作为参数传递。我想知道这样做的正确方法是什么?现在,我只是将键作为参数传递:
(function() {
function Venue(name, poor, satisfactory, excellent) {
this.name = name;
this.serviceRatings = {
poor: poor,
satisfactory: satisfactory,
excellent: excellent
};
}
var dining = new Venue("dining", .1, .15, .2);
console.log(dining["serviceRatings"]["satisfactory"] // .15
}());
尽管这是可行的,但它来自Ruby背景,只是传递对象本身并在初始化程序中分配其值才是正确的选择。这是我能想到的最好的选择:
class Venue
def initialize(name, serviceRatings = {})
@name = name
@poor = serviceRatings[:poor]
@satisfactory = serviceRatings[:satisfactory]
@excellent = serviceRatings[:excellent]
end
end
有没有办法用Javascript做到这一点?现在,我编写事情的方式使我感到好像在膨胀构造函数的参数列表(除非这是正确的方法)。
您可以像在ruby类中一样传递对象。
function Venue(name, options) {
this.name = name;
this.serviceRatings = options;
}
var dining = new Venue("dining",{
poor: .1,
satisfactory: .15,
excellent: .2
});
上面将创建与以前相同的输出。值得一提的是ecmascript 2015将类引入了javascript-因此您也可以这样编写:
class Venue {
constructor(name, options = {}) {
this.name = name;
this.serviceRatings = options;
}
}
在上方,我们使用一个空对象作为default parameter
,这也是es2015的功能。
如果您想拥有默认的键名,可以使用类似的名称
class Venue {
constructor(name, options = {}) {
this.name = name;
this.serviceRatings = Object.assign({
poor: undefined,
satisfactory: undefined,
excellent: undefined
}, options);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句