Eri*_*ver 3 javascript mootools
我有一个我定义的类,我在我的应用程序中使用.我有一个页面,我想更改覆盖该类的所有实例上的一些方法.这是一些代码来说明.
MyClass的-的script.js
var MyClass = new Class({
foo: function() {
return 1;
},
bar: function() {
return this.foo() + 9;
},
});
Run Code Online (Sandbox Code Playgroud)
变化MyClass的-的script.js
MyClass.implement({
foo: function() {
return this.parent() * -1;
},
});
Run Code Online (Sandbox Code Playgroud)
如果我在页面上包含myclass-script.js,我应该看到:
var test = new MyClass();
test.bar() === 10; //true
Run Code Online (Sandbox Code Playgroud)
如果我包含myclass-script.js然后更改-myclass-script.js,我应该看到:
var test = new MyClass();
test.bar() === 8; //true
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是MyClass.implement适用于MyClass的所有实例,但它没有"覆盖"该方法,它取代了它.所以this.parent()调用失败,因为该方法没有父级.如果我做MyClass.extend它不适合我想要的,我没有看到MyClass的实例调用重写方法.
您可以存储旧版本的foo,基本上是Dimitar所做的:
var foo = MyClass.prototype.foo;
MyClass.implement('foo', function(){
return foo.call(this) * -1;
});
Run Code Online (Sandbox Code Playgroud)
或者您可以使用MooTools中的Class.Refactor使用以下previous方法:
Class.refactor(MyClass, {
foo: function(){
return this.previous() * -1;
}
});
Run Code Online (Sandbox Code Playgroud)