我有一个对象:
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';
}
我只是不想复制原始代码。
更新:
我与原型无关。该对象已经创建。
答案 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();