代码之家  ›  专栏  ›  技术社区  ›  Danyal Imran

部分覆盖原型?

  •  0
  • Danyal Imran  · 技术社区  · 5 年前

    是否存在部分覆盖原型的方法?

    我正在使用fabricjs,希望覆盖 onKeyDown 活动 Textbox 班目标是有一个不同的 Enter 关键行为比默认行为更重要。

    我尝试过这种方法

    fabric.Textbox.prototype.onKeyDown = (function(onKeyDown) {
        return function(e) {
            if (e.keyCode === 46) console.log('blur');
            // else super(e); <== default behavior would be appreciated here
    
            onKeyDown.call(this, e);
        }
    })(fabric.Textbox.prototype.onKeyDown);
    

    结果是 进来 密钥只起作用,fabric开发者/团队已经实现的功能已经丢失。我想要 onKeyDown 按照它应该的开箱即用,而不是默认的织物 进来 行为,我要我的习惯 进来 上述事件的关键行为。

    1 回复  |  直到 5 年前
        1
  •  2
  •   Durga    5 年前

    将密钥码添加到 keysMap 并指定你的方法。

    演示

    fabric.Textbox.prototype.keysMap[13] = 'onEnterKeyPressed';
    
    fabric.Textbox.prototype.onEnterKeyPressed = function(e){
      console.log('enter key pressed')
    }
    
    var canvas = new fabric.Canvas('c');
    var textbox = new fabric.Textbox('FABRICJS')
    canvas.add(textbox)
    canvas{
      border:1px solid;
    }
    <script src="http://cdnjs.cloudflare.com/ajax/libs/fabric.js/2.6.0/fabric.js"></script>
    <canvas id='c' width=400 height=400></canvas>
        2
  •  0
  •   James Coyle    5 年前

    我相信这样做会奏效:

    // cache original function
    const stockKeyDown = fabric.Textbox.prototype.onKeyDown
    
    // override prototype
    fabric.Textbox.prototype.onKeyDown = function(e) {
      if (e.keyCode === 46) {
        console.log('blur')
        return
      }
    
      // call cached version
      stockKeyDown.call(this, e)
    }
    
    推荐文章