扩展一个已有的对象方法

3

我有一个对象:

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

我不想抄袭原始代码。

更新:

我和原型没有任何关系。对象已经创建好了。


我认为这会很有用 https://stackoverflow.com/questions/13745021/javascript-decorator-pattern - Naor Tedgi
你在这里使用第三方库吗,例如Prototype?那第一行看起来不像是原生JS。如果是这种情况,可能值得添加一个标签。并且最好指示帮助的人您是否想坚持使用该库及其方法。 - Matt Morgan
是的,我正在使用原型,并添加了标签,谢谢。基本上这是一个Magento2的事情。 - vaso123
1个回答

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


问题在于我与原型没有任何关系。对象已经被创建了。我需要使用一个现有的对象。 - vaso123

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接