让我们说我有这样的课程
class Vector {
constructor(x,y) {
this.x = x
this.y = y
}
}
我该怎么做呢?
class Vector {
constructor() {
}
var x;
var y;
}
var v = new Vector()
v.x = 3
v.y = 4
我基本上想在构造函数之外声明我的变量。做了一些研究。什么都没找到
答案 0 :(得分:2)
我猜你在谈论Property Initialiazers
。
如果稍微修改一下,您的代码可以正常工作:
class Vector {
constructor() {}
x = 1;
y = 2;
}
var v = new Vector();
console.log(v.x, v.y); // 1 2
v.x = 3
v.y = 4
console.log(v.x, v.y); // 3 4
请注意,目前这是stage-2
proposal,所以它无法在任何开箱即用的浏览器中使用。
如果你正在使用babel ,你可以使用transform-class-properties
插件。
如果你没有使用babel ,你可以使用一些替代品 - 它们已在this question中讨论过。
答案 1 :(得分:1)
您可以在创建实例后分配属性:
class Vector {
constructor() {
this.x = null;
this.y = null;
}
}
let v = new Vector();
v.x = 1;
v.y = 2;
console.log(v.x, v.y); // 1 2
或强>
您可以使用get
和set
定义属性,如下所示:
class Vector {
constructor() {
this.xValue = null;
this.yValue = null;
}
get x() {
return this.xValue;
}
set x(newVal) {
this.xValue = newVal;
}
get y() {
return this.yValue;
}
set y(newVal) {
this.yValue = newVal;
}
}
let v = new Vector();
v.x = 1;
v.y = 2;
console.log(v.x, v.y); // 1 2
第二种方法允许您在设置之前操纵新值。
示例:
class Vector {
constructor() {
this.xValue = null;
this.yValue = null;
}
get x() {
return this.xValue;
}
set x(newVal) {
this.xValue = `The value of 'x' is ${newVal}.`;
}
get y() {
return this.yValue;
}
set y(newVal) {
this.yValue = `The value of 'y' is ${newVal}.`;
}
}
let v = new Vector();
v.x = 1;
v.y = 2;
console.log(v.x, v.y); // The value of 'x' is 1. The value of 'y' is 2.