我是初学者Web开发人员。 对不起,我的英语不好。
export class Vector{
protected x : number = 0
protected y : number = 0
protected z : number = 0
set(x?: number , y? : number , z? : number){
this.x = x ? x : this.x
this.y = y ? y : this.y
this.z = z ? z : this.z
}
}
我要从“ this.x = x?x:this.x”中删除“:this.x”
我想写点时间,我想删除其他部分。
set(x?: number , y? : number , z? : number){
if(x){
this.x = x
}
}
我不想这样写。 因为它不酷。 任何人都可以告诉我编写此代码的好方法。
-添加---
我想做的就是这样。
set(x?: number , y? : number , z? : number){
this.x = x ? x : DO NOTHING(WRITE NOTHNG)
}
----------致Lars Holdaas ----------
在这里!在平等之下! 说“;”是必需的。
答案 0 :(得分:2)
通常,x && this.x=x
是完成此操作的最短语法。
但是x,y和z都是数字。对数字使用这种简写语法有点危险。考虑用x = 0调用set的情况。 0 && this.x=x
不会执行this.x,因为Javascript中的0为false。通过阅读代码,这似乎不是您想要实现的,相反,如果未定义x,则想跳过设置this.x。
在这种情况下,我建议使用以下代码:
set(x?: number , y? : number , z? : number){
typeof x === 'number' && (this.x = x);
typeof y === 'number' && (this.y = y);
typeof z === 'number' && (this.z = z);
}
这样,您的set
函数将支持发送0作为参数,而当前不支持。
答案 1 :(得分:1)
一种编写方法的干净方法是
set(x?: number , y? : number , z? : number){
this.x = x || this.x;
this.y = y || this.y;
this.z = z || this.z;
}
另一种方式是
set(x?: number , y? : number , z? : number){
x && this.x = x;
y && this.y = y;
z && this.z = z;
}
但是,正如@Lars Holdaas已经提到的那样,这将不支持伪造的值(例如0
或""
)。
解决此问题的通用方法是编写验证或过滤器函数以判断该值是否为
实际上是否真的适合该参数。
// returns `true` if x is a number
const n = x => typeof n === 'number';
set(x?: number , y? : number , z? : number){
n(x) && this.x = x;
n(y) && this.y = y;
n(z) && this.z = z;
}
希望这会有所帮助:)