gpt4 book ai didi

JavaScript 有条件地覆盖类方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:19:30 25 4
gpt4 key购买 nike

我有一个我定义的类,我在整个应用程序中使用它。我有一个页面,我想在其中更改重写该类所有实例上的一些方法。下面是一些代码来说明。

我的类脚本.js

var MyClass = new Class({
foo: function() {
return 1;
},

bar: function() {
return this.foo() + 9;
},
});

更改我的类脚本.js

MyClass.implement({
foo: function() {
return this.parent() * -1;
},
});

如果我在页面上包含 myclass-script.js,我应该看到:

var test = new MyClass();
test.bar() === 10; //true

如果我包含 myclass-script.js 然后 change-myclass-script.js 我应该看到:

var test = new MyClass();
test.bar() === 8; //true

我遇到的问题是 MyClass.implement 适用于 MyClass 的所有实例,但它不会“覆盖”该方法,而是替换它。所以 this.parent() 调用失败,因为该方法没有父级。如果我执行 MyClass.extend,它不会像我想要的那样应用,并且我没有看到 MyClass 的实例调用被覆盖的方法。

最佳答案

您可以存储旧版本的 foo,基本上是 Dimitar 所做的:

var foo = MyClass.prototype.foo;
MyClass.implement('foo', function(){
return foo.call(this) * -1;
});

或者您可以使用 Class.Refactor来自 MooTools More 使用 previous 方法:

Class.refactor(MyClass, {
foo: function(){
return this.previous() * -1;
}
});

关于JavaScript 有条件地覆盖类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4771792/

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