我有一个使用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方法。我在这里做什么错了?
答案 0 :(得分:0)
您似乎根本无法混合骨干对象和ES6类。
这里是post which explains it in great detail。
事实证明,ES6类不支持将属性直接添加到类实例中,而仅支持函数/方法。当您了解实际情况时,这才有意义。通过JavaScript继承,属性通常是在创建实例时在实例上设置的,而方法则在原型对象上设置并在每个实例之间共享。如果将属性直接添加到原型中,它们还将在每个实例之间共享,如果属性是具有可变状态(如数组)的对象,则会造成问题
您将必须坚持使用Object.extends()
的骨干方式。这是您在coffeescript中的代码的示例:
MyRouter = Backbone.Router.extend
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