从原型方法访问静态属性



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);

最新更新