Class 表达式构造函数
Class Expression Constructor
在 ES6 中,JavaScript 具有正确的 class 语法,允许您将它们声明为 class A {}
或 const A = class {}
。后者是 class 表达式。
我正在从事一个一切都可定制的项目。用户将创建一个具有相同名称的新文件,但前缀除外,并且文件中的任何内容都会覆盖原始文件。但是,似乎您不能使用 class 表达式的构造函数来执行此操作。
const A = class {};
A.constructor = function(name) {
this.name = name;
}
你会期望上面的方法有效,(甚至 A.prototype.constructor
)但它没有。
如何以这种方式正确定义构造函数?我不能在 class 声明中包含它。
class
语法创建构造函数并填充分配给其 prototype
属性 的对象。没有 "class" 与构造函数分开。在您的示例中, A
是对 class {}
表达式创建的构造函数的引用。虽然您可以在分配给 A.prototype
的对象上替换 constructor
属性 的值,但这不会改变 A
所指的函数,因此也不会改变通过 new A
.
会发生什么
你可以设置A.prototype.constructor
,然后给class A
一个constructor
,它遵循原型上定义的那个如果不是不再使用相同的功能,转发传递的任何参数。这会创建非常不寻常的 类(通常,A.prototype.constructor === A
是 true
),但它可以满足您的需求。
const A = class {
constructor(...args) {
let Constructor = A.prototype.constructor
if (Constructor !== A) {
Constructor.apply(this, args);
}
}
};
(A.prototype.constructor = function(name) {
this.name = name;
}).prototype = A
console.log(
new A('It works!')
)
编辑: 另一个避免混淆 A.prototype.constructor
的选项是在 [=] 上定义静态 Constructor
属性 14=],你可以根据自己的喜好改变:
const A = class {
static Constructor = Function.prototype
constructor(...args) {
A.Constructor.apply(this, args);
}
};
A.Constructor = function(name) {
this.name = name;
}
console.log(
new A('It works!')
)
在 ES6 中,JavaScript 具有正确的 class 语法,允许您将它们声明为 class A {}
或 const A = class {}
。后者是 class 表达式。
我正在从事一个一切都可定制的项目。用户将创建一个具有相同名称的新文件,但前缀除外,并且文件中的任何内容都会覆盖原始文件。但是,似乎您不能使用 class 表达式的构造函数来执行此操作。
const A = class {};
A.constructor = function(name) {
this.name = name;
}
你会期望上面的方法有效,(甚至 A.prototype.constructor
)但它没有。
如何以这种方式正确定义构造函数?我不能在 class 声明中包含它。
class
语法创建构造函数并填充分配给其 prototype
属性 的对象。没有 "class" 与构造函数分开。在您的示例中, A
是对 class {}
表达式创建的构造函数的引用。虽然您可以在分配给 A.prototype
的对象上替换 constructor
属性 的值,但这不会改变 A
所指的函数,因此也不会改变通过 new A
.
你可以设置A.prototype.constructor
,然后给class A
一个constructor
,它遵循原型上定义的那个如果不是不再使用相同的功能,转发传递的任何参数。这会创建非常不寻常的 类(通常,A.prototype.constructor === A
是 true
),但它可以满足您的需求。
const A = class {
constructor(...args) {
let Constructor = A.prototype.constructor
if (Constructor !== A) {
Constructor.apply(this, args);
}
}
};
(A.prototype.constructor = function(name) {
this.name = name;
}).prototype = A
console.log(
new A('It works!')
)
编辑: 另一个避免混淆 A.prototype.constructor
的选项是在 [=] 上定义静态 Constructor
属性 14=],你可以根据自己的喜好改变:
const A = class {
static Constructor = Function.prototype
constructor(...args) {
A.Constructor.apply(this, args);
}
};
A.Constructor = function(name) {
this.name = name;
}
console.log(
new A('It works!')
)