javascript 使用Webpack 5时无法覆盖基类的原型方法

7kqas0il  于 2023-02-18  发布在  Java
关注(0)|答案(1)|浏览(105)

我在我的项目& webpack中使用库PIXI.js进行捆绑。我想替换PIXI中某个类(Sprite)的方法。在PIXI中,该类定义如下:

var extendStatics$6 = function(d, b) {
        extendStatics$6 = Object.setPrototypeOf ||
                ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
                function (d, b) { for (var p in b) { if (b.hasOwnProperty(p)) { d[p] = b[p]; } } };
        return extendStatics$6(d, b);
};

function __extends$6(d, b) {
        extendStatics$6(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
}

var Sprite = (function (_super) {
        __extends$6(Sprite, _super);
        function Sprite(texture) {
                var _this = _super.call(this) || this;
                // some extra initialization logic
        }
        Sprite.prototype.destroy = function (options) {
                // some logic
        };
        return Sprite;
}(Container));

我试着这样破解:

import { Sprite } from 'pixi.js';

console.log(Sprite.prototype, Sprite);
const destroySprite = Sprite.prototype.destroy;
Sprite.prototype.destroy = function (options: any) {
        console.log(this);
        // some extra logic goes here
        destroySprite.call(this, options);
};

但没有为Sprite对象调用“patched”方法。
调试时,我注意到当PIXI循环通过一些必须销毁的对象时(销毁有孩子的container,其中也有Sprites等类),调用他们的destroy方法,遇到Sprite对象时,调用PIXI原来的destroy方法,但遇到某个类时,它派生自Sprite -它工作正常,并且正在调用spy方法。
另外,如果它有用的话,当我console.log的Sprite.prototype -我得到了容器类在控制台,但当我只打印Sprite -我看到它的构造函数。我认为这可能是一些问题连接到Webpack,但我不确定。
我试着在PIXI的论坛里问,但是好像卡住了。有人能帮帮我吗?

0sgqnhkj

0sgqnhkj1#

我自己在12月份的时候也遇到过以前的webpack构建的问题。看起来webpack构建是从2个不匹配的PIXI版本中同时提取的,这取决于我调用的是什么。你的问题看起来很相似。我通过将我的解决方案迁移到不同的bundler / boilerplate来解决它,但我不确定它是否适合你。
我不是100%理解Webpack,但我认为当您构建时,它必须使用CDN或通过查看package.json中的依赖项添加的PIXI的某个最小化版本。
你可以试着问The Pixi.JS Discord server,那里有非常有用的人。

相关问题