开发者

Returning the method of a function

In the code below, I've got two objects declared, with one object inheriting the properties and functions of another.

I want to use the super variable to call the methods of the object I inherited from. When I trace out itemEditor, I can see the function and it's methods correctly. When I try to access the method of itemEditor, it returns undefined.

What am I doing wrong? Is there a better way to do this?

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


Your code seems a little confused. On the one hand myObject.itemEditor is a constructor and therefore a function (myObject.itemEditor.apply(this, [vars])), and on the other you treat it like an object with a prototype (this.prototype = myObject.itemEditor.prototype;).

That's not even considering that super is a reserved keyword.

Your example may be simplifying something you are trying to do, but I don't see why you don't just use the usual prototype inheritance. That way you can still have a method in your local instance and call the prototype one within it if you want e.g.

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


I used your advice and it works well now. In regards to treating it like a function and an object, myObject .itemEditor.apply(this, [vars]); was still required in order for the object to inherit the properties of itemEditor. I should have made that clear in the original code. If there's a better way to do this, let me know.

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜