このコードの断片は全てfabric.Rect(S)のtoObject
方法を拡張されていません。 作成したばかりのrect
varでホストされているfabric.Rectの特定のインスタンスのtoObject
メソッドを上書きしています。
(function(toObject) {
return function() {
return fabric.util.object.extend(toObject.call(this), {
name: this.name
});
};
})(rect.toObject);
fabric.util.object.extend
は、lodash merge
と同じです。第1引数としてオブジェクトをとり、第2引数からオブジェクトのプロパティを追加します。
to.Object.call(this)
は、ラッピング関数の最初の引数であるtoObject(修正前のrect.toObject)を呼び出しています。
ファブリックサポートコードを修正することなく使用することなく、この機能:
rect.toObjectを([ '名前'])。
それともこれを書くためのよりよい方法は、次のようになります。
var originalToObject = fabric.Rect.prototype.toObject;
fabric.Rect.prototype.toObject = function(additionalProps) {
var originalObject = originalToObject.call(this, additionalProps);
originalObject.name = this.name;
return originalObject;
};
この場合は、より明確にすることができます。
rectオブジェクトの 'toObject'メソッドをオーバーライドしています。これは、そのオブジェクトに対してのみ' fabric.Rect() 'オブジェクトのすべてに適用されません。オブジェクトを直列化しているときに 'toObject'メソッドが呼び出されます。その場合、オブジェクトに追加のプロパティとして' name'が追加されます。 – Durga
はい私はこの行が何をしているか知りたいと理解しています。 return fabric.util.object.extend(toObject.call(this)、{ name:this.name }); – Shakthi