Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery JavaScript子类化和属性_Javascript_Jquery_Oop_Inheritance - Fatal编程技术网

jQuery JavaScript子类化和属性

jQuery JavaScript子类化和属性,javascript,jquery,oop,inheritance,Javascript,Jquery,Oop,Inheritance,我实现了一个类(我称之为RowsEditor)及其子类(我称之为DateRowsEditor),jQuery代码如下: function create_RowsEditor(tableId) { var rowsEditor = { tableId: tableId, quit_row: function(ctl) { /*...*/ } }; $('#'+tableId).click(function(event) { var tr = event.dele

我实现了一个类(我称之为RowsEditor)及其子类(我称之为DateRowsEditor),jQuery代码如下:

function create_RowsEditor(tableId) {
  var rowsEditor = {
    tableId: tableId,
    quit_row: function(ctl) { /*...*/ }
  };
  $('#'+tableId).click(function(event) {
    var tr = event.delegateTarget;
    rowsEditor.quit_row(tr);
  });
  return rowsEditor;
}

function create_DateRowsEditor(tableId) {
  var rowsEditor = $.extend({}, create_RowsEditor(tableId), {
    quit_row: function(ctl) { /*...*/ }
  };
  return rowsEditor;
}
然后创建DateRowsEditor()类型的对象:

问题在于,在用户单击“退出”时,调用的对象是create_RowsEditor()创建的对象,而不是create_DateRowsEditor()创建的派生对象


如何以结构化和面向对象的方式正确执行此操作?

我通过添加.init()方法解决了此问题:

并创建如下对象:

/*var rowsEditor =*/ create_ComeEditor('come').init();
这是解决我的问题的正确方法,因为这种方法只在应该调用事件处理程序时才调用它的初始化

问题在于,在用户单击quit_row()时,派生对象没有调用它

那就不要使用
extend
。只需创建对象,并覆盖其
quit\u行
方法:

function create_DateRowsEditor(tableId) {
  var rowsEditor = create_RowsEditor(tableId);
  rowsEditor.quit_row = function(ctl) { /*...*/ };
  return rowsEditor;
}
/*var rowsEditor =*/ create_ComeEditor('come').init();
function create_DateRowsEditor(tableId) {
  var rowsEditor = create_RowsEditor(tableId);
  rowsEditor.quit_row = function(ctl) { /*...*/ };
  return rowsEditor;
}