部分覆盖原型?

时间:2019-02-21 11:17:07

标签: javascript dom fabricjs dom-events

反正还有部分覆盖原型吗?

我正在使用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);

结果是Enter键仅起作用,并且结构开发人员/团队实现的现有功能丢失了。我希望onKeyDown像开箱即用那样工作,但我希望默认事件的Enter自定义键行为不是默认结构的Enter行为。

2 个答案:

答案 0 :(得分:2)

将您的密钥代码添加到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>

答案 1 :(得分:0)

我相信这样会起作用:

// 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)
}