我有一个类,它使用coffeescript中的extends
关键字扩展了Backbone.Router。我如何覆盖我的类中的Backbone.Router.execute方法?
我尝试在我的子类中添加一个具有相同方法签名的execute,但它仍然调用父类方法,而不是我的自定义方法。
jQuery ->
class MyRouter extends Backbone.Router
routes:
"path/:id" : "myFunction"
execute: (callback, args, name) ->
console.log('hello')
console.log(args)
# do stuff
args.push(parseQueryString(args.pop()));
if callback
callback.apply(@, args);
myFunction: (id) ->
# do stuff
我想在调用myFunction之前对args进行一些检查,但不知怎么的,无法覆盖execute方法。我在这里做错了什么?
1条答案
按热度按时间mrwjdhj31#
看起来你不能简单地混合 Backbone.js 的对象和ES6类。
这是一个post which explains it in great detail。
ES6类不支持直接向类示例添加属性,只支持函数/方法。当您了解实际发生的情况时,这是有意义的。对于JavaScript继承,属性通常是在创建示例时设置的,而方法是在原型对象上设置的,并在每个示例之间共享。如果属性被直接添加到原型中,它们也将在每个示例之间共享,如果属性是具有可变状态的对象(如数组),则会产生问题
您必须坚持使用
Object.extends()
的基本方法。下面是coffeescript中的代码示例: