在class
语法中,我们可以轻松访问构造函数:
class MyClass {
static get STATIC_PROP() {
return 500;
}
getStaticProp() {
return this.constructor.STATIC_PROP;
}
}
item = new MyClass();
console.log(item.getStaticProp()); // prints 500, so: cool!!
但在prototype
语法中,这似乎并不容易:
MyClass = function() {};
MyClass.STATIC_PROPERTY = 500;
MyClass.prototype = {
getStaticProp() {
return this.constructor.STATIC_PROPERTY
}
}
item2 = new MyClass();
console.log(item2.getStaticProp()); // prints undefined, so: not cool... it should print: 500
谁能帮我找出如何在第二个代码的范式(意味着prototype
而不是class
(中实现我在第一个代码中所做的工作。
提前谢谢你。
编辑:我可以通过添加以下内容来解决此问题:
MyClass.prototype.constructor = MyClass;
我想这是在从prototype
方法访问静态属性时保持功能的唯一方法。
与其将新对象分配给MyClass.prototype
,不如在MyClass.prototype
对象上定义一个新属性。
改变
MyClass.prototype = {
getStaticProp() {
return this.constructor.STATIC_PROPERTY
}
}
自
MyClass.prototype.getStaticProp = function() {
return this.constructor.STATIC_PROPERTY
}
const MyClass = function() {};
MyClass.STATIC_PROPERTY = 500;
MyClass.prototype.getStaticProp = function() {
return this.constructor.STATIC_PROPERTY
}
const item2 = new MyClass();
console.log(item2.getStaticProp());
可以直接使用构造函数的名称来访问静态属性
const MyClass = function() {};
MyClass.STATIC_PROPERTY = 500;
console.log(MyClass.STATIC_PROPERTY);