我的意愿
o的对象worko.work()前打印"Hello“o.work()后打印“再见”o.work()将由第三方召集我的尝试
// 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 oIn
他们说原型遗传是超亲的。
更新
work()使用this.score,它在继承后被重写。更新2
o.work()应该打印5my_o.work()应该打印10发布于 2013-12-24 09:24:17
弄明白了:
// sample library object
var o = {
     score: 5,
     work: function() {
                     console.log(this.score);
                }
};
// my code
var cons = function () {
     this.score = 10;
     this.parent = arguments.callee.prototype;
     this.work = function () {
          console. log("Hello");
           // this.prototype.work() // Doesn't work since 'this' is an object
           // objects don't contain a link to prototype.
           // ###### With direct reference to `cons` ###### //
           // cons.prototype.work(); // (No Context) -> prints 5
                    // OR
           cons.prototype.work.call(this); // (With 'this' context) -> prints 10
           // ###### Without direct reference to `cons` [ Preferred ] ###### //
           // this.parent.work(); // (No Context) -> prints 5
                    // OR
           this.parent.work.call(this); // (With 'this' context) -> prints 10
          console. log("Bye");
     };
 };
 cons.prototype = o;
 my_o = new cons();
 my_o.work();期望值达到
o.work()打印5my_o.work()打印10发布于 2013-12-24 08:36:31
有点丑,但你可以打电话给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
发布于 2013-12-24 08:27:27
您需要确切地知道要调用的父程序是谁,并直接调用它(使用this方法传递本地.call值),或者需要使用OOP库来实现这些功能,而代价是需要非常复杂的代码设计。
https://stackoverflow.com/questions/20757377
复制相似问题