【问题标题】:Extend an existsing object method扩展现有对象方法
【发布时间】:2018-04-23 12:51:43
【问题描述】:

我有一个对象:

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

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

更新:

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

【问题讨论】:

  • 你这里用的是第三方库吗,EG Prototype?第一行看起来不像普通的 JS。如果是这样的话,也许值得为此添加一个标签。最好向帮助您的人表明您确实想坚持使用该库及其方法。
  • 是的,“我是”使用原型,添加了标签,谢谢。基本上它是一个magento2的东西。

标签: javascript object prototype


【解决方案1】:

这里有两种选择

选项一

仅覆盖方法

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

【讨论】:

  • 问题是我与原型无关。对象已经创建。我需要使用现有的对象。
猜你喜欢
  • 1970-01-01
  • 2018-05-28
  • 1970-01-01
  • 1970-01-01
  • 2011-07-15
  • 2015-05-08
  • 2011-05-31
  • 1970-01-01
相关资源
最近更新 更多