如何将 '__extends = function () {}' 重写为 object
How to rewrite '__extends = function () {}' to an object
首先抱歉,标题没有意义。这是我正在处理的内容,最后还有一个 TL;DR。
我正在使用 Microsoft 的 tslib 库,here 是上下文的完整源代码。我需要对库进行一些小的调整以使其与我的项目一起工作,所以我 copy-pasted 将代码保存到一个文件中并在那里进行编辑。修改后的代码适用于我之前处理的 React 项目,但由于以下几行,它无法使用 React Native:
(function (exporter) {
// some irrelevant stuff
__extends = function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
});
(这部分我没有修改,你可以在原源码第66行找到)
当 React Native 尝试将其编译为本机代码时,它会中断并显示错误消息
Prototype value can only be an object or null
错误来自 __extends = function(d, b) {
赋值。
所以我需要以某种方式将内部匿名函数转换为 object,问题是即使我已经使用 JavaScript 多年,我真的不知道这段代码是什么应该做的。我是一个 ES6+ 的人,这些东西对我来说就像埃及象形文字。各位JS老手能不能过来救救我?
TL;DR:我需要以某种方式将 __extends = fuction() {}
转换为 object,它会做与函数相同的事情。
这是一个非常古老的模式,用于设置 class 继承。可以找到类似的东西here。 new __()
的使用早于 Object.create
的存在。你应该可以用
替换这个东西
function __extends(d, b) {
extendStatics(d, b);
d.prototype = b === null
? Object.create(b)
: Object.assign(Object.create(b.prototype), {constructor: d});
}
首先抱歉,标题没有意义。这是我正在处理的内容,最后还有一个 TL;DR。
我正在使用 Microsoft 的 tslib 库,here 是上下文的完整源代码。我需要对库进行一些小的调整以使其与我的项目一起工作,所以我 copy-pasted 将代码保存到一个文件中并在那里进行编辑。修改后的代码适用于我之前处理的 React 项目,但由于以下几行,它无法使用 React Native:
(function (exporter) {
// some irrelevant stuff
__extends = function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
});
(这部分我没有修改,你可以在原源码第66行找到)
当 React Native 尝试将其编译为本机代码时,它会中断并显示错误消息
Prototype value can only be an object or null
错误来自 __extends = function(d, b) {
赋值。
所以我需要以某种方式将内部匿名函数转换为 object,问题是即使我已经使用 JavaScript 多年,我真的不知道这段代码是什么应该做的。我是一个 ES6+ 的人,这些东西对我来说就像埃及象形文字。各位JS老手能不能过来救救我?
TL;DR:我需要以某种方式将 __extends = fuction() {}
转换为 object,它会做与函数相同的事情。
这是一个非常古老的模式,用于设置 class 继承。可以找到类似的东西here。 new __()
的使用早于 Object.create
的存在。你应该可以用
function __extends(d, b) {
extendStatics(d, b);
d.prototype = b === null
? Object.create(b)
: Object.assign(Object.create(b.prototype), {constructor: d});
}