函数中变量的Javascript继承(OpenERP)

函数中变量的Javascript继承(OpenERP),javascript,openerp,Javascript,Openerp,基本上,我试图通过扩展一个函数来覆盖它。我有以下基本(简化)代码: 然后,我正在编写自己的.js,我想在其中继承和重写exportAsJSON函数,但我不知道如何扩展它。以下是我的错误做法: openerp.my_module = function(db) { db.point_of_sale.Order = db.point_of_sale.Order.extend({ exportAsJSON: function() { var orde

基本上,我试图通过扩展一个函数来覆盖它。我有以下基本(简化)代码:

然后,我正在编写自己的.js,我想在其中继承和重写exportAsJSON函数,但我不知道如何扩展它。以下是我的错误做法:

openerp.my_module = function(db) {

    db.point_of_sale.Order = db.point_of_sale.Order.extend({

        exportAsJSON: function() {

            var order_data = this._super();
            //... add more stuff on object
            return order_data;
        }
    })
}
正确的做法是什么

我希望我提供了足够的信息来回答这个问题(顺便说一句,我正在开发OpenERP)。任何帮助都将不胜感激

编辑: 更具体地说,错误似乎在扩展本身:

db.point_of_sale.Order = db.point_of_sale.Order.extend({
…即使我将一个简单的返回值设为0;在我的exportAsJSON函数中,页面没有加载,我的浏览器控制台中出现以下错误:

"Cannot call method 'extend' of undefined" 

我想您需要类似于
超类.原型.方法.调用(this)


在JavaScript中通常会这样做:

var eaj = db.point_of_sale.Order.prototype.exportAsJSON;

db.point_of_sale.Order = db.point_of_sale.Order.extend({
    exportAsJSON: function() {

        var order_data = eaj.apply( this, arguments );
        //... add more stuff on object
        return order_data;
    }
})

这基本上就是问题所在:

openerp.point_of_sale = function(db) {
    var Order = Backbone.Model.extend({
     ^
     |
  this is a private variable
  not a property!
因此,您根本无法访问它。如果是这样定义的:

openerp.point_of_sale = function(db) {
    openerp.point_of_sale.Order = Backbone.Model.extend({
                           ^
                           |
                     this is now a property of point_of_sale
                     (basically public variable)
然后,您可以尝试以下方式访问它:

db.point_of_sale.Order = db.point_of_sale.Order.extend({

所以,答案是你不能这么做。您需要扩展或修改
db.point\u of_sale
而不是
Order

这可能是一个很好的答案,但是您确定
类和
超类不共享原型吗?还是我需要学习更多?因为如果他们这样做,那么显然
exportAsJSON
将覆盖它,形成一个递归无限循环。感谢您的帮助。然而,我担心错误在于我的.extend定义。。。exportAsJSON()定义中没有这么多。请在我的原始帖子中检查我的编辑。我正在开发一个OpenERP框架;也许像freakish建议的那样,需要对主干有更深的理解。再次感谢。但这种方法有一个不同的错误:“无法读取未定义的属性‘原型’”。此外,我还对我原来的帖子进行了编辑。我将感谢任何进一步的帮助。两个错误都是一样的。他们告诉你,
db.point\u of\u sale.Order
未定义。这意味着真正的错误实际上发生在更早的时候,即
销售点。订单
应该被定义,但不是。我试图做的基本上与@nicobistillos相同的事情,这种方法奏效了(我一看到它就明白了)。你在对另一个答案的评论中也说得对,调用prototype会导致无限循环,我试过了。我们需要更多地了解你的代码。也许是一辆出租车?我明白了。这很有道理。所以基本上你建议我从扩展销售点开始:
db.point\u\u\u\u销售=db.point\u\u\u销售.extend({
这确实不会给出错误。但是我如何从那里重写exportAsJSON函数呢?恐怕没有办法重写它。你唯一能做的就是重新定义方法:
dp.point\u of_sale=some\u new\u function
。是的,这意味着复制旧函数中的几乎所有内容,但至少它是可行的。
openerp.point_of_sale = function(db) {
    openerp.point_of_sale.Order = Backbone.Model.extend({
                           ^
                           |
                     this is now a property of point_of_sale
                     (basically public variable)
db.point_of_sale.Order = db.point_of_sale.Order.extend({