JavaScript : How to override and wrap a method from parent object?

标签 javascript oop

我的意图:

  • 使用对象 o 和方法 work
  • o.work()之前打印“Hello”
  • o.work()之后打印“Bye”
  • o.work() 将由第 3 方调用

我的尝试:

// sample library object
var o = {
     score: 5,
     work: function() {
                     console.log(this.score);
                }
};

// my code
var cons = function () {
     this.score = 10;
     this.work = function () {
          console. log("Hello");
           // how to call parent's work() ?
           // if I do this.prototype.work() -> prints 5
           // But parent's work should be called when this.score is 10
          console. log("Bye");
     };
 };
 cons.prototype = o;
 my_o = new cons();

 // my_o will be passed to 3rd party instead of o

简而言之:

  • 我正在尝试装饰继承的方法。
  • 使用 super 很容易,但 JavaScript 没有 super

他们说原型(prototype)继承是优越的。

更新:

  • work() 使用 this.score,继承后会被覆盖。

更新 2:

  • 期望 o.work() 应打印 5
  • 期望 my_o.work() 应打印 10

最佳答案

有点难看,但是你可以调用cons.prototype.work;

var Cons = function () {
     this.work = function () {
         alert('Hello');
         cons.prototype.work.call(this); // <= here
         alert('Bye');
     };
 };

或者更通用:

var Cons = function () {
     this.parentwork = arguments.callee.prototype.work;
     this.work = function () {
         alert('Hello');
         this.parentwork.call(this);
         alert('Bye');
     };
};

查看此jsFiddle

关于JavaScript : How to override and wrap a method from parent object?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20757377/

相关文章:

Javascript 分析 div?

javascript - 哪些 JavaScript 事件可以触发弹出窗口而不被阻止?

javascript - 对象的构造函数或初始化函数

python - 创建类 python 和 __init__ 的实例

javascript - 有没有Slice()的反函数?

javascript - Toggle 脚本问题 我该如何在纯 JavaScript 中解决这个问题?没有 jQuery

c# - 这个。与基地。对于继承的 protected 非虚拟方法?

c# - 在不可变对象(immutable对象)和值对象的结构之间进行选择

javascript - 如何将 Chrome 内置的 PDF 查看器集成到网络应用程序中

java - 当构造函数需要调用可重写方法时保持干燥