javascript - 如何使用揭示原型(prototype)模式在内部调用重写方法

标签 javascript prototype-programming revealing-prototype

我目前正在努力研究 Javascript 中揭示原型(prototype)模式的一些概念和语法。你们能帮我理解一下吗?

我想要实现的目标:从基类的另一个方法调用重写的方法。

我是如何做到的:

  1. 基类:

    var Base = function() {
        //...
    };
    Base.prototype = function() {
        var init = function() {
            console.log('init');
            customInit.call(this);
        },
        customInit = function() {
            console.log('custom init source');
        };
    
        return {
            init: init,
            customInit: customInit
        };
    } ();
    
  2. 扩展类:

    var Extended = function () {
        //...
    };
    Extended.prototype = new Base();
    Extended.prototype.customInit = function () {
        console.log('custom init extended');
    };
    
  3. 调用扩展类:

    window.addEventListener('load', function (){
        var myObject = new Extended();
        myObject.init();
        myObject.customInit();
    });
    

从类外部对 customInit 的调用执行该方法的重写版本(我想要的),而从类内部的调用仍然调用该方法的“基本”版本(不是我想要的)。

这正常吗?有什么解决方法可以实现这一目标吗?

最佳答案

对代码进行一些修改(1行):

.......
var init = function() {
    console.log('init');
    //customInit.call(this);
    this.customInit.call(this);
},
.....

关于javascript - 如何使用揭示原型(prototype)模式在内部调用重写方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21625098/

相关文章:

Javascript 和原型(prototype)继承

Javascript 原型(prototype)属性在数组和对象字段中无法按预期工作

javascript - 揭示原型(prototype) 'this' 上下文

javascript - D3.js:根据值更改条形的颜色

javascript - 使用 window.addEventListener 添加/删除新的事件监听器是否很昂贵?

javascript - 根据存储在另一个数组中的引用对数组进行排序

javascript - Google 电子表格脚本 - 获取日期作为数字

javascript - 在命名空间内设置标准 JavaScript 原型(prototype)继承?