从 subclass 的实例中获取 class 的 属性
Get property of class from an instance of subclass
据我所知,构造函数的 __proto__
属性 被认为已弃用。有没有更好的方法从其子 class 的已创建实例访问父 class 的 属性?
示例:
在下面的例子中,请求的属性是cls
。
class Vehicle {
constructor () {
var div = document.createElement("div");
var cls = this.constructor.__proto__.cls + " " + this.constructor.cls;
div.setAttribute("class", cls);
document.body.appendChild(div);
}
}
class Car extends Vehicle {}
class Motorcycle extends Vehicle {}
Vehicle.cls = "vehicle";
Car.cls = "car";
Motorcycle.cls = "motorcycle";
let vehicle = new Vehicle();
let car = new Car();
let bike = new Motorcycle();
.vehicle {
width: 50px;
height: 50px;
display: inline-block;
background-color: red;
}
.car {
background-color: green;
}
.motorcycle {
background-color: blue;
}
您可以使用静态方法和 super
:
class Vehicle {
constructor () {
var div = document.createElement("div");
var cls = new.target.getCls();
div.setAttribute("class", cls);
document.body.appendChild(div);
}
static getCls() {
return 'vehicle';
}
}
class Car extends Vehicle {
static getCls() {
return 'car ' + super.getCls();
}
}
class Motorcycle extends Vehicle {
static getCls() {
return 'motorcycle ' + super.getCls();
}
}
let vehicle = new Vehicle();
let car = new Car();
let bike = new Motorcycle();
.vehicle {
width: 50px;
height: 50px;
display: inline-block;
background-color: red;
}
.car {
background-color: green;
}
.motorcycle {
background-color: blue;
}
这允许子 classes 自行决定如何构建 class 列表。
如果你总是想添加基class的CSSclass,为什么不直接访问它呢?
class Vehicle {
constructor () {
var div = document.createElement("div");
var cls = Vehicle.cls + " " + new.target.cls;
div.setAttribute("class", cls);
document.body.appendChild(div);
}
}
class Car extends Vehicle {}
class Motorcycle extends Vehicle {}
Vehicle.cls = "vehicle";
Car.cls = "car";
Motorcycle.cls = "motorcycle";
let vehicle = new Vehicle();
let car = new Car();
let bike = new Motorcycle();
.vehicle {
width: 50px;
height: 50px;
display: inline-block;
background-color: red;
}
.car {
background-color: green;
}
.motorcycle {
background-color: blue;
}
据我所知,构造函数的 __proto__
属性 被认为已弃用。有没有更好的方法从其子 class 的已创建实例访问父 class 的 属性?
示例:
在下面的例子中,请求的属性是cls
。
class Vehicle {
constructor () {
var div = document.createElement("div");
var cls = this.constructor.__proto__.cls + " " + this.constructor.cls;
div.setAttribute("class", cls);
document.body.appendChild(div);
}
}
class Car extends Vehicle {}
class Motorcycle extends Vehicle {}
Vehicle.cls = "vehicle";
Car.cls = "car";
Motorcycle.cls = "motorcycle";
let vehicle = new Vehicle();
let car = new Car();
let bike = new Motorcycle();
.vehicle {
width: 50px;
height: 50px;
display: inline-block;
background-color: red;
}
.car {
background-color: green;
}
.motorcycle {
background-color: blue;
}
您可以使用静态方法和 super
:
class Vehicle {
constructor () {
var div = document.createElement("div");
var cls = new.target.getCls();
div.setAttribute("class", cls);
document.body.appendChild(div);
}
static getCls() {
return 'vehicle';
}
}
class Car extends Vehicle {
static getCls() {
return 'car ' + super.getCls();
}
}
class Motorcycle extends Vehicle {
static getCls() {
return 'motorcycle ' + super.getCls();
}
}
let vehicle = new Vehicle();
let car = new Car();
let bike = new Motorcycle();
.vehicle {
width: 50px;
height: 50px;
display: inline-block;
background-color: red;
}
.car {
background-color: green;
}
.motorcycle {
background-color: blue;
}
这允许子 classes 自行决定如何构建 class 列表。
如果你总是想添加基class的CSSclass,为什么不直接访问它呢?
class Vehicle {
constructor () {
var div = document.createElement("div");
var cls = Vehicle.cls + " " + new.target.cls;
div.setAttribute("class", cls);
document.body.appendChild(div);
}
}
class Car extends Vehicle {}
class Motorcycle extends Vehicle {}
Vehicle.cls = "vehicle";
Car.cls = "car";
Motorcycle.cls = "motorcycle";
let vehicle = new Vehicle();
let car = new Car();
let bike = new Motorcycle();
.vehicle {
width: 50px;
height: 50px;
display: inline-block;
background-color: red;
}
.car {
background-color: green;
}
.motorcycle {
background-color: blue;
}