扩展存在的对象方法

时间:2018-04-23 12:51:43

标签: javascript object prototype

我有一个对象:

MyObj = new Class.create();
MyObj.prototype = {
    initialize: function () {
        this.myArg = null;
    },

    setArg: function(arg) {
        this.myArg = arg;

    },

    showArg: function () {
        alert(this.myArg);
    }
};

var x = new MyObj();
x.setArg('Something');
x.showArg();

x.setArg = function(arg) {
    //how to call here the original??
    alert('Here is my custom code')
}

它是在代码中创建的,我无法覆盖。

我想要做的是扩展这个现有的对象:

x.setArg = function(arg) {
        this.myArg = arg + ' a new cake';
}

我只是不想复制原始代码。

更新:

我与原型无关。该对象已经创建。

1 个答案:

答案 0 :(得分:2)

这里有两个选择

选项一

仅覆盖方法



var MyObj = function(){};
MyObj.prototype = {
    initialize: function () {
        this.myArg = null;
    },

    setArg: function(arg) {
        this.myArg = arg;

    },

    showArg: function () {
        alert(this.myArg);
    }
};

var oldMethod = MyObj.prototype.setArg;
MyObj.prototype.setArg = function(arg) {
    oldMethod.call(this,arg)
    console.log(arg)
}


var x = new MyObj();
x.setArg('Something');
x.showArg();




选项二

扩展对象,然后覆盖您想要的任何方法



var MyObj = function(){};
MyObj.prototype = {
    initialize: function () {
        this.myArg = null;
    },

    setArg: function(arg) {
        this.myArg = arg;

    },

    showArg: function () {
        alert(this.myArg);
    }
};


var MyNewObject = function() {
}

MyNewObject.prototype = new MyObj()
MyNewObject.prototype.setArg = function(arg) {
    MyObj.prototype.setArg.call(this,arg)
    console.log(arg)
}


var x = new MyNewObject();
x.setArg('Something');
x.showArg();