开发者

Returning the method of a function

开发者 https://www.devze.com 2023-04-05 08:43 出处:网络
In the code below, I\'ve got two objects declared, with one object inheriting the properties and functions of another.

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

精彩评论

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