gpt4 book ai didi

javascript - 有没有办法发现 javascript 6 类是否定义了自己的构造函数?

转载 作者:行者123 更新时间:2023-12-02 15:59:30 26 4
gpt4 key购买 nike

有什么方法可以确定子类是否从静态方法(基类中)实现构造函数?

我正在尝试编写一个静态 create 方法(其作用类似于 new 关键字),默认情况下通过将属性值作为属性对象传递来工作:

class Person extends Class {
greet() { return 'hello from ' + this.name; }
}
var p = Person.create({name: 'world'}; // create a new Person object and set its `name` property to `'world'`
console.log(p.greet()); // => "hello from world"

但是将其交给类的构造函数(如果有的话):

class Person2 extends Class {
constructor(name) {
super();
this.name = name;
}
greet() { return 'hello from ' + this.name; }
}
var p = Person2.create('world');
console.log(p.greet()); // => "hello from world"

我一直在寻找子类是否定义了自己的构造函数......

class Class {
static create(...args) {
let has_ctor = ?? // true iff the current subclass defines a constructor..

if (has_ctor) {
// let the constructor handle everything
return new this(...args);
} else {
// assume that `args` contains exactly 1 pojo that defines instance variables to be overridden..
var instance = new this();
let props = args[0];
for (let prop in props) instance[prop] = props[prop];
return instance;
}
}
}

这可能吗?

最佳答案

看起来会更容易做到

class Class {
static create(...args) {
// let the constructor handle everything
return new this(...args);
}
constructor(props){
Object.assign(this, props);
}
}

然后,如果事物覆盖构造函数,则可以选择将 Prop 传递给 super() 或自行手动分配它们。

关于javascript - 有没有办法发现 javascript 6 类是否定义了自己的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31325134/

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