我正在构建一个简单的class
。我的问题是:
如何在静态类方法内访问类方法,或为此访问this
?
当尝试像这样在this
方法内访问static
时:
const { ProductsCollection } = require('../utils/Collection')
let modeledCollection = ProductsCollection.mapToModel(legacy)
我收到 TypeError :this.generateModel is not a function
。这是我的课程:
class ProductsCollection {
generateModel () {
let model = { name: 'testing' }
return model
}
static mapToModel (legacy) {
if (!isObject(legacy))
return legacy
let current = this.generateModel() // Here!!!
for (let key in legacy) {
// some code...
}
return current
}
}
module.exports = { ProductsCollection }
谢谢!
答案 0 :(得分:2)
如何在静态类方法内部访问类方法?
从Number = input("write your number: ")
if isinstance(Number, int):
print('Number is Integer')
elif (Number).is_integer():
print('Number is Integer')
else:
print("Number is Float")
方法访问实例信息的唯一方法是创建一个实例(或接收一个实例作为参数,或关闭一个实例(这很奇怪),等等;例如,您需要一个实例)。这是Sample Table:
A B C
0 False True False
1 False False False
2 True True False
3 True True True
4 False True False
5 True True True
6 True False False
7 True False True
8 False True True
9 True False False
方法的重点:它们与类的实例无关,而与构造函数相关。
如图所示,您的length = [3, 4, 2]
方法也不使用该实例,因此也可以将其设为index = [5, 2, 7]
。然后,您可以通过static
(假设通过static
调用generateModel
)或static
(如果您不希望这样做)来访问它:
this.generateModel
或者如果mapToModel
需要实例信息,则可以在ProductsCollection.mapToModel
中使用ProductsCollection.generateModel
(或class ProductsCollection {
static generateModel() {
return {name: "testing"};
}
static mapToModel(legacy) {
return this.generateModel();
// or `return ProductsCollection.generateModel();` if you want to use
// `ProductsCollection` specifically and not be friendly
// to subclasses
}
}
console.log(ProductsCollection.mapToModel({}));
)来创建实例,然后访问generateModel
该实例。
new ProductsCollection
答案 1 :(得分:2)
您无法访问实例方法,因为它是静态方法。这是一个经典的错误。在静态实例中使用实例方法的唯一方法是,如果有可用的类的实例(因此称为“实例方法”)。
通常,您在决定什么应该是静态的以及什么不是静态的方面犯了很多错误……我不费吹灰之力就建议将generateModel
方法设为静态。另一种方法是完全删除generateModel
方法并将其行为合并到构造函数中。这实际上取决于您的需求。
请记住,如果要在方法内部访问非静态属性,则该属性应该不是静态的。