Подтвердить что ты не робот

Наследование Javascript для переменной внутри функции (OpenERP)

В основном я пытаюсь переопределить функцию, расширив ее. У меня есть следующий базовый (упрощенный) код:

openerp.point_of_sale = function(db) {

    var Order = Backbone.Model.extend({

        exportAsJSON: function() {
            return {'bigobject'}
        }
    })
}

Затем я пишу свой собственный .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" 
4b9b3361

Ответ 1

Я думаю, вам нужно что-то вроде SuperClass.prototype.method.call(this):

openerp.my_module = function(db) {

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

        exportAsJSON: function() {

            var order_data = db.point_of_sale.Order.prototype.exportAsJSON.call(this);
            //... add more stuff on object
            return order_data;
        }
    })
}

Ответ 2

Вот как вы обычно это делаете в 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;
    }
})

Ответ 3

Это, в основном, проблема:

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_of_sale вместо Order.