1. ホーム
  2. javascript

[解決済み] Uncaught TypeError: 未定義のプロパティ 'hasOwnProperty' を読み取れませんでした。

2022-02-08 22:35:25

質問

fabric.jsを使って、キャンバスにテキストを描いています。テキストラベルを作成する関数があります。ラベルが選択されたときに関数を実行させたいと思います。このための構文は次のとおりです。 label.on('selected', functionToCall()); これは、関数を無名の内部関数にするとうまくいきますが、別の関数として分割すると、Uncaught TypeErrorが発生します。

未定義のプロパティ 'hasOwnProperty' を読み取ることができません。

何が間違っているのでしょうか?

以下は、私のために動作しないコードです。以下は 壊れたコード を設定したバージョンと、jsfiddle上で 無名関数 というのがありますが、これは動作します。

"use strict";

var canvas = new fabric.Canvas('c', {selection: false}),
  position = 50;

function onLabelSelection(theLabel) {
  if (theLabel.hasOwnProperty('edge')) {
    selectedEdge = theLabel.edge;
  } else {
    selectedEdge = null;
  }
}

function createLabel() {
  var label;
    
  label = new fabric.Text('Hello World', {
    left: position,
    top: position
  });
  position += 50;
    
  label.edge = null;

  label.on('selected', onLabelSelection(this));

  return label;
}

canvas.on('mouse:up', function() {
  var newLabel = createLabel(); 
  canvas.add(newLabel);
});

解決方法は?

<ブロッククオート

この構文は label.on('selected', functionToCall())

いいえ、イベントハンドラの構文は、次のとおりです。 渡す を呼び出すのではなく、ハンドラ関数を呼び出します。

label.on('selected', functionToCall);

を試してみてはいかがでしょうか。 label.on('selected', onLabelSelection.bind(this)) または this 内部 createLablel はどうやら undefined - ちょうど label.on('selected', onLabelSelection) .