Возврат метода функции - PullRequest
       5

Возврат метода функции

1 голос
/ 17 сентября 2011

В приведенном ниже коде я объявил два объекта, один из которых наследует свойства и функции другого.

Я хочу использовать переменную super для вызова методов объекта Iунаследовано от.Когда я прослеживаю itemEditor, я вижу функцию и ее методы правильно.Когда я пытаюсь получить доступ к методу itemEditor, он возвращает undefined.

Что я делаю не так?Есть ли лучший способ сделать это?

var myObject = {    
itemEditor : function (vars) {

    this.editItem = function () {
        alert("Editing Item");
    }
},

recurringItemEditor : function (vars) {
    myObject .itemEditor.apply(this, [vars]);
    this.prototype = myObject.itemEditor.prototype;
    var super = myObject.itemEditor

    this.editItem = function () {
        console.log("fn.recurringItemEditor.editItem");
        console.log(super);
        console.log(super.editItem);
        super.editItem.call(this);
    }
}

Ответы [ 2 ]

1 голос
/ 17 сентября 2011

Ваш код выглядит немного запутанным.С одной стороны, myObject.itemEditor является конструктором и, следовательно, функцией (myObject.itemEditor.apply(this, [vars])), а с другой стороны, вы рассматриваете его как объект с прототипом (this.prototype = myObject.itemEditor.prototype;).

Это даже не учитывая, чтоsuper - зарезервированное ключевое слово.

Ваш пример может упростить то, что вы пытаетесь сделать, но я не понимаю, почему вы не просто используете обычное наследование прототипа.Таким образом, вы все равно можете иметь метод в своем локальном экземпляре и вызывать прототип внутри него, если хотите, например,

recurringItemEditor : function (vars) {
    this.prototype = new myObject.itemEditor(vars);

    this.editItem = function () {
        console.log("fn.recurringItemEditor.editItem");
        console.log(this.prototype);
        console.log(this.prototype.editItem);
        this.prototype.editItem.call(this);
    }
}
0 голосов
/ 18 сентября 2011

Я воспользовался вашим советом, и теперь он работает хорошо.Что касается обработки его как функции и объекта, myObject .itemEditor.apply(this, [vars]); все еще требовался для того, чтобы объект наследовал свойства itemEditor.Я должен был сделать это ясно в исходном коде.Если есть лучший способ сделать это, дайте мне знать.

var myObject = {    
    itemEditor : function (vars) {
        var myVars = vars + "foo";

        this.editItem = function () {
            alert(myVars);
        }
    },

    recurringItemEditor : function (vars) {
        myObject .itemEditor.apply(this, [vars]);
        this.prototype = new myObject.itemEditor(vars);

        this.editItem = function () {
            console.log("fn.recurringItemEditor.editItem");
            console.log(this.prototype);
            console.log(this.prototype.editItem);
            this.prototype.editItem.call(this);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...