gpt4 book ai didi

javascript - 使用 es6 类语法创建一个将 Function 对象创建为实例的类

转载 作者:行者123 更新时间:2023-11-30 00:31:34 26 4
gpt4 key购买 nike

是否可以创建一个类,用其原型(prototype)上的方法实例化函数?我正在尝试将代码从原型(prototype)结构转换为使用 es6 类语法。这是起点的人为设计和过度简化的示例

function createFun(init) {
function fun(newDats) {
this.data = newDats;
// create universe
}
function internalMethod() {
}
fun.data = init;
fun.aMethod = function () {
internalMethod();
}
assign(fun, AnExtendableClass.prototype);
return fun;
}

// and can be used as such
fun = createFun('first');
fun('second');
fun.aMethod();
fun.methodFromExtendableClass('third')

这是我尝试过的

class Fun extend AnExtendableClass {
constructor(init) {
super();
this.data = init;
function fun(newDats) {
this.data = newDatas;
//create universe
}
assign(fun, this);
return fun;
}

aMethod() {
}
}

不幸的是,这不起作用并且没有任何返回方法。

最佳答案

Is it possible to create a class that instantiates functions with methods on it's prototype?

是的,使用 ES6 可以子类化 Function - 然而,这并不是很好,因为构造函数需要代码字符串:

class Fun {
constructor() {
super("newDats", `
this.data = newDats;
// create universe
`)
}
data() { }
aMethod() { }
}

let fun = new Fun;
fun(…);
fun.aMethod(…);

I am trying to convert code from prototype structure to using the es6 class syntax. Here is a contrived and over simplified example of the starting point

不要为此使用 class 语法。新语法非常有限,只能用于标准类声明。如果你做了任何奇怪的事情——从构造函数返回函数、从其他类复制方法、分配静态属性和使用内部方法在这方面绝对是奇怪的——那么请使用“旧的”显式方式。新的 Reflect.setPrototypeOf 在这里给了你更多的自由。

关于javascript - 使用 es6 类语法创建一个将 Function 对象创建为实例的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29248034/

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