gpt4 book ai didi

javascript - 为什么我继承的静态属性没有值?

转载 作者:行者123 更新时间:2023-11-30 14:45:53 25 4
gpt4 key购买 nike

我正在为我正在做的项目构建一个 ORM。我在 ORM 中有两个类,BaseModelSessionLink ,以及它们都试图使用它们的外部函数。 BaseModel好吧,是基本模型——其他模型继承的模型,这样我就可以定义共同的行为。 SessionLink是其中一种继承模型。

我希望能够链接来自 BaseModel 的查询方法,使用继承模型。像这样:

SessionLink.join("a table").where({some: "conditions"}).get()

为此,我需要在 BaseModel 上有一个静态属性存储通过链接方法构建的查询。到目前为止,一切都很好。我已将该静态属性与 getter 和 setter 放在一起。

class BaseModel {
static get queryBuilder() {
return this._query || null;
}

static set queryBuilder(val) {
this._query = val;
}

static join(table) {
if (this.queryBuilder) {
// Add to existing query
this.queryBuilder = this.queryBuilder.addJoin(table);
}
else {
// Create a new query, store it in queryBuilder
this.queryBuilder = new Query().addJoin(table);
}
}

static where(conditions) {
// Implementation similar to .join
}

static get() {
// Actually send the query to the database and return results
magicallyGetDatabaseConnection().sendQuery(this.queryBuilder);
}
}

SessionLink简单地继承自 BaseModel ( class SessionLink extends BaseModel) 并添加了一些与此问题无关的特定于模型的详细信息。

我遇到的问题是:queryBuilder不保持它的值(value)。我可以运行 this.queryBuilder = new Query(...)来自 joinwhere或任何地方,然后记录 this.queryBuilder 的值在下一行 返回为null .换句话说:

static join(table) {
if (this.queryBuilder) {
// Add to existing query
this.queryBuilder = this.queryBuilder.addJoin(table);
}
else {
// Create a new query, store it in queryBuilder
this.queryBuilder = new Query().addJoin(table);

console.log(this.queryBuilder); // null
}
}

这是为什么?我该如何解决?

最佳答案

您可以通过不在一行中实例化和调用 addJoin 来解决此问题:

this.queryBuilder = new Query()
this.queryBuilder.addJoin(table)

或者通过从您的addJoin() 方法返回this

class Query {
addJoin(table) {
// existing code
return this
}
}

关于javascript - 为什么我继承的静态属性没有值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48939398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com