返回一个函数的方法

时间:2011-09-17 18:04:19

标签: javascript inheritance

在下面的代码中,我声明了两个对象,其中一个对象继承了另一个对象的属性和功能。

我想使用super变量来调用我继承的对象的方法。当我追踪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 个答案:

答案 0 :(得分:1)

您的代码似乎有点困惑。一方面,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);
    }
}

答案 1 :(得分:0)

我使用了你的建议,现在效果很好。关于将它视为函数和对象,为了使对象继承itemEditor的属性,仍然需要myObject .itemEditor.apply(this, [vars]);。我应该在原始代码中明确说明。如果有更好的方法,请告诉我。

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);
        }
    }
}