Javascript 根据条件扩展余烬类

Javascript 根据条件扩展余烬类,javascript,class,ember.js,extends,discourse,Javascript,Class,Ember.js,Extends,Discourse,有可能在条件允许的情况下延长余烬等级吗?大概是这样的: A.reopen({ if (condition) { init: function() { this.super(); // some functionality }.on('didInsertElement'); } }) A.reopen({ if (condition) { init: function() { this.super(); // s

有可能在条件允许的情况下延长余烬等级吗?大概是这样的:

A.reopen({
  if (condition) {
    init: function() {
      this.super();
      // some functionality
    }.on('didInsertElement');
  }
})
A.reopen({
  if (condition) {
    init: function() {
      this.super();
      // some functionality
    }.on('didInsertElement'),

    clear_up: function() {
      // some stuff
    }.on('willDestroyElement')
  }
})
目前我有这样的模式:

A.reopen({
  init: function() {
    this.super();
    if (condition) {
      // some stuff
    }
  }.on('didInsertElement'),

  cleanup: function() {
    if (condition) {
      // some stuff
    }
  }.on('willDestroyElement')
})
我猜如果我可以扩展一个类,条件是我可以像这样简化我的模式:

A.reopen({
  if (condition) {
    init: function() {
      this.super();
      // some functionality
    }.on('didInsertElement');
  }
})
A.reopen({
  if (condition) {
    init: function() {
      this.super();
      // some functionality
    }.on('didInsertElement'),

    clear_up: function() {
      // some stuff
    }.on('willDestroyElement')
  }
})

在插件中为

创建的所有类扩展看起来您想要的是Java中所谓的抽象类

Ember.Component.extend({ // abstract class

  doSomeInit: Ember.K,

  doSomeCleaning: Ember.K,

  didInsertElement: function() {
    this.super(..arguments);
    this.doSomeInit();
  },

  willDestroyElement: function() {
    this.doSomeCleaning();
  }
})

// class A
Ember.Component.extend(MyIncompleteClass, {

  doSomeInit: function() { /* etc */ },

  doSomeCleaning: function() { /* etc */ }

});

// class B
Ember.Component.extend(MyIncompleteClass, {

  doSomeInit: function() { /* etc */ },

  doSomeCleaning: function() { /* etc */ }

});

旁注:最好覆盖生命周期挂钩,而不是使用Ember.on,以保证执行顺序;这是在同一事件的多个Ember.on的情况下。

看起来您想要的是Java中的抽象类

Ember.Component.extend({ // abstract class

  doSomeInit: Ember.K,

  doSomeCleaning: Ember.K,

  didInsertElement: function() {
    this.super(..arguments);
    this.doSomeInit();
  },

  willDestroyElement: function() {
    this.doSomeCleaning();
  }
})

// class A
Ember.Component.extend(MyIncompleteClass, {

  doSomeInit: function() { /* etc */ },

  doSomeCleaning: function() { /* etc */ }

});

// class B
Ember.Component.extend(MyIncompleteClass, {

  doSomeInit: function() { /* etc */ },

  doSomeCleaning: function() { /* etc */ }

});

旁注:最好覆盖生命周期挂钩,而不是使用Ember.on,以保证执行顺序;这是在同一事件的多个Ember.on的情况下。

为什么不切换第一行和第二行?你想重新打开哪个类,你的用例是什么?@Keo我已经更新了问题以澄清我的案例Keo的答案对你没有帮助吗<代码>如果(条件){A.重新打开({为什么不切换第一行和第二行?你想重新打开哪个类,你的用例是什么?@Keo我更新了问题以澄清我的案例Keo的答案对你没有帮助吗?
如果(条件){A.重新打开({
我正在从插件扩展ember类,我无法创建自己的类,甚至不能用那个位更新你的问题?你是如何从插件扩展的?(我想是ember cli插件)我正在从插件扩展ember类,我无法创建自己的类,甚至不能用那个位更新你的问题?你是如何从插件扩展的?(我想是ember cli插件)