【发布时间】:2019-09-11 22:02:34
【问题描述】:
我有一个类,它返回一个带有属性的对象。我想访问构造函数中前一个道具的值。
我有下一个工作代码:
class KafkaConsumer {
constructor (metaDataBrokerList, groupID, autoCommit, AutoOffsetReset, topicName) {
return {
consumer: this.create(metaDataBrokerList, groupID, autoCommit, AutoOffsetReset, topicName),
connect: (consumer) => { this.connect(consumer) }
};
}
create (metaDataBrokerList, groupID, autoCommit, AutoOffsetReset, topicName) {
var consumer = new Kafka.KafkaConsumer({
'metadata.broker.list': metaDataBrokerList,
'group.id': groupID,
'enable.auto.commit': autoCommit, // don't commit my offset
'auto.offset.reset': AutoOffsetReset, // consume from the start
});
.
.
.
return ( consumer );
}
// Conect the consumer
connect (consumer) {
consumer.connect();
}
}
调用是(如您所见,我需要将创建的变量传递给函数'connect'。我想避免这种情况):
let kafkaConsumer = new KafkaConsumer(...props);
// Connect the consumer
kafkaConsumer.connect(kafkaConsumer.consumer);
我想要类似的东西:
class KafkaConsumer {
constructor (metaDataBrokerList, groupID, autoCommit, AutoOffsetReset, topicName) {
return {
consumer: this.create(metaDataBrokerList, groupID, autoCommit, AutoOffsetReset, topicName),
connect: this.connect(consumer)
// Where 'this.connect' is my function and 'consumer' is the previous prop
};
}
.
.
.
}
所以调用应该是:
// Connect the consumer
kafkaConsumer.connect();
【问题讨论】:
-
一个
constructor不应该return一个对象。您应该初始化实例上的属性! -
我知道,它仅用于测试新事物(我知道在构造函数中返回对象是一种不好的做法)。谢谢你的建议
-
测试与否,不要做。使用应该使用的
class,或者改为编写工厂函数。 -
什么是工厂函数?
-
一个普通的
function返回一个新对象。不要使用class语法。
标签: javascript class object ecmascript-6