提问人:DungeonDragon 提问时间:5/6/2021 最后编辑:Pawel VeselovDungeonDragon 更新时间:5/6/2021 访问量:43
如何在 JavaScript 中创建自己的类实现并为其传递构造函数
How to create an own implementation of class in JavaScript and pass it a constructor
问:
也许这样的问题已经存在,但我没有找到它,我仍然有问题。我试过了:
function defClass(obj) {
const constructor = obj.constructor;
constructor.prototype = obj;
return constructor;
}
然后:
const Person = defClass({
constructor: function (name) {
this.name = name;
},
voice() {
console.log(`Hello, I'm ${this.name}`);
}
})
它有效。但是,如果我想使用这样的构造函数怎么办:
const Person = defClass({
constructor(name) {
this.name = name;
},
voice() {
console.log(`Hello, I'm ${this.name}`);
}
})
我认为它更类似于原生实现。但是我收到一个错误:“人不是构造函数”。这两种方式有什么区别?对不起这么愚蠢的问题,我只是想弄清楚这个基本的事情。感谢您的帮助。
答:
0赞
CertainPerformance
5/6/2021
#1
方法 - 即:
someMethodName() {
}
不能作为构造函数调用 - 你会得到你看到的错误。将方法改为函数:
function defClass(obj) {
const constructor = obj.constructor;
constructor.prototype = obj;
return constructor;
}
const Person = defClass({
constructor: function(name) {
this.name = name;
},
voice() {
console.log(`Hello, I'm ${this.name}`);
}
})
const p = new Person('foo');
p.voice();
或者调用时不要使用:new
function defClass(obj) {
const constructor = obj.constructor;
constructor.prototype = obj;
return function(...args) {
const instance = Object.create(obj);
constructor.apply(instance, args);
return instance;
};
}
const Person = defClass({
constructor(name) {
this.name = name;
return this;
},
voice() {
console.log(`Hello, I'm ${this.name}`);
}
})
const p = Person('foo');
p.voice();
评论
类
结构,它(现在)在任何模糊的现代环境中都得到了普遍支持。不需要此功能。defClass