我正在创建一个普通的ES6类。遇到的问题是将变量置于class
封装内,同时将其保持在constructor().
之外
使用此代码时,您可以复制此错误:
class Polygon {
constructor() {
this.name = "Polygon";
var goodboy = "I like pie...I can stay since I'm legal!";
}
var badboy = "what're you gonna do when they come for you? delete me to get rid of all your problems!";
}
var poly1 = new Polygon();
console.log(poly1.name);
您可以在任何地方试用此代码!尝试删除badboy
和goodboy
,看看它是如何播放的。
我该如何解决这个问题?
欢迎任何解释, 法鲁克
上述代码是从MDN修改的。此代码无意,仅用于变量声明示例目的。
答案 0 :(得分:0)
无法在类的构造函数之外定义变量
是的,这在语法上并不合适。
我将一个变量放在
class
封装中,同时将其保持在constructor()
之外。
那是不可能的。 class
不提供任何此类封装,它不会创建块范围。只需将变量置于class
定义之外。或者不要把它变成变量而是变成属性。
答案 1 :(得分:0)
// adjusted
class Polygon
{
constructor()
{
this.name = "Polygon";
var goodboy = "I like pie...I can stay since I'm legal!";
}
}
var poly = new Polygon();
console.log(poly.name);
// option 2
// This works also
function Polygon2()
{
this.name = "Polygon";
class Poly
{
constructor(obj)
{
this.user = "Farouk";
this.name2 = obj.name;
}
}
let poly2 = new Poly(this);
this.user = poly2.user;
this.name2 = poly2.name2;
}
var poly2 = new Polygon2();
console.log(poly2.name);
console.log(poly2.user);
console.log(poly2.name2);
答案 2 :(得分:0)
我认为,在一个类中你不能直接声明一个成员,你需要使用getter和setter。否则您将收到错误:"意外的令牌。期望构造函数,方法,访问器或属性。"
以下是你如何得到你的坏人:
class Polygon {
constructor() {
this.name = "Polygon";
}
get badboy(){
return "what're you gonna do when they come for you?";
}
}
var poly1 = new Polygon();
console.log(poly1.name); // Polygon
console.log(poly1.badboy); // what're you gonna do when they come for you?
您的代码意图不够明确。如果您不将它用作实例属性,为什么要将它放在类中?
你知道poly1.badboy = "what're you gonna do when they come for you?"
在没有麻烦的情况下做同样的事情。
答案 3 :(得分:-1)
你可以像这样声明类级变量
class Polygon {
myVar = null;
constructor(args){
this.myVar = args.myVar;
}
}
let polygon = new Polygon({myVar:"some value"});
console.log(polygon.myVar); // "some value"
要通过使用Babel进行转换来实现此目的,您需要使用transform-class-properties插件。