在Javascript中设置属性的默认值
如何设置类的属性在Javascript中设置属性的默认值,javascript,oop,default-value,Javascript,Oop,Default Value,如何设置类的属性p1、p2、p3和p4`的默认值: class O extends AnotherClass { constructor(p1,p2,p3,p4) { super(); \\ for the this-reference if (p1) this.p1 = p1; if (p2) this.p2 = p2; if (p3) this.p3 = p3; if (p4) this.p3 = p4; } 我必须一个接一个地写
p1
、p2
、p3
和p4`的默认值:
class O extends AnotherClass {
constructor(p1,p2,p3,p4) {
super(); \\ for the this-reference
if (p1) this.p1 = p1;
if (p2) this.p2 = p2;
if (p3) this.p3 = p3;
if (p4) this.p3 = p4;
}
我必须一个接一个地写吗
O.prototype.p1 = "default1"
O.prototype.p2 = "default2"
O.prototype.p3 = "default3"
O.prototype.p4 = "default4"
还是有更优雅的方式,比如
O.prototype = {p1: "default1", p2 : "default1", p3 : "default3", p4 : "default4"}
但是后者似乎不起作用…当您在构造函数中声明参数时,您可以在es6中设置默认属性,如
构造函数(p1='默认变量',p2='默认变量',p3='默认变量',p4='默认变量')
当您在构造函数中声明如下参数时,您可以在es6中设置默认属性构造函数(p1='默认变量',p2='默认变量',p3='默认变量',p4='默认变量')
除了普通的ES2015+默认参数值之外,@Fried_Chicken已经回答,还有另一种方法
为什么不接受参数作为对象,然后使用ES2015+解构功能?这是一个很好的选择,因为您可以按任意顺序提供整个参数,甚至只提供其中的一个或部分参数
此外,您不需要为某些给定参数提供null
/未定义的:
doStuff(1, null, null, 2);
请参阅下面的可运行代码片段并使用它。在您的场景中可以应用相同的解决方案,因为可以在类构造函数上使用解构
函数doStuff({arg0=null,arg1=null}={}){
如果(arg0!==null){
console.log(arg0);
}否则{
控制台日志(“未提供”);
}
}
doStuff();
doStuff({arg0:“你好,世界”})代码>除了@Fried_Chicken已经回答的纯ES2015+默认参数值之外,还有一种替代方法
为什么不接受参数作为对象,然后使用ES2015+解构功能?这是一个很好的选择,因为您可以按任意顺序提供整个参数,甚至只提供其中的一个或部分参数
此外,您不需要为某些给定参数提供null
/未定义的:
doStuff(1, null, null, 2);
请参阅下面的可运行代码片段并使用它。在您的场景中可以应用相同的解决方案,因为可以在类构造函数上使用解构
函数doStuff({arg0=null,arg1=null}={}){
如果(arg0!==null){
console.log(arg0);
}否则{
控制台日志(“未提供”);
}
}
doStuff();
doStuff({arg0:“你好,世界”})
this.p1=p1 | |“一些默认值”
,等等为什么不将参数传递给super()
?请注意,if(p1)
将对未定义的值以外的值求值为false,例如null、0、false等。您最好进行一种类型的测试。this.p1=p1 | |“一些默认值”
,etc为什么不将参数传递给super()
?请注意if(p1)
将对未定义的值以外的值求值为false,例如null、0、false等。您最好使用类型测试。哇,StackOverflow什么时候有可运行的代码段了?@MichaelHey,我不确定,但我相信那是一年多以前的事了!非常感谢。工作起来像个傻瓜,StackOverflow什么时候开始有可运行的代码段了?@MichaelHewson嘿,我不确定,但我相信那是一年多以前的事了!非常感谢。工作得很有魅力