【问题标题】:Backbone best way to change method for object更改对象方​​法的主干最佳方法
【发布时间】:2015-08-24 14:34:03
【问题描述】:
var MyView = Backbone.View.extend({
    action: function() {
        console.log('action');
    },
});

我可以在初始化时覆盖方法吗,例如:

var my_special_view = new MyView({
    action: function() {
        console.log('new action');
    },
})

【问题讨论】:

  • 我有一个自定义类,我想用不同的方法创建实例

标签: javascript jquery class inheritance backbone.js


【解决方案1】:

您可以创建自己的自定义视图,然后扩展它而不是 Bacbone.View

例如

var MySpecialView = MyView.extend({
    action: function() {
        console.log('new action');
    }
})

var my_special_view = new MySpecialView();

如果你真的只是想覆盖一个特定实例的方法而不创建你自己的自定义视图,你可以直接覆盖实例上的函数。例如

var my_special_view = new MyView();
my_special_view.action = function () {
    console.log('new action');
};

【讨论】:

  • 没有extend就不能继承方法吗?
  • 您也可以始终覆盖实例上的方法,例如 (mySpecialView.action = function () {...}),但这看起来是一种更混乱的方法。
  • @Arti 你有什么不想使用extend的具体原因吗?
【解决方案2】:

你可以的

var my_special_view = new MyView();
my_special_view.action = function() {
    console.log('new action');
};

它只是创建视图的一个实例,然后重新定义它的“动作”方法。我认为这正是您想要的,因为它使您能够只使用一次“动作”的这种实现,因此它确实是一个 特殊 视图。 另外,它是一个 javascript 功能,因此您可以将它与您使用的任何库/框架一起使用。

【讨论】:

  • 请考虑编辑您的帖子,以添加更多关于您的代码的作用以及它为何能解决问题的说明。大部分只包含代码的答案(即使它正在工作)通常不会帮助 OP 理解他们的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-21
  • 2012-04-17
  • 2013-01-22
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多