3

私はJavaScriptに少し慣れていませんが、使用できるさまざまな継承モデルがあることを知っています。KineticJSを使用したプロジェクトがあり、変更ログで、プロジェクトのv3.10.3のリリースで継承モデルが変更されていることに気付きまし'more easily extend or add custom methods to Kinetic classes'

私はこれを検索しましたが、これの明確な例はどこにも見つからないようです。プロパティとメソッドの両方をKineticクラスに追加する適切な方法は何か、そしてそれらを拡張して独自のカスタムクラスを作成する方法を誰かに教えてもらえないかと思っていました。KineticJSで使用されている継承モデルはjavascriptで一般的なものですか?

4

2 に答える 2

0

さまざまな方法を使用できます。

1Kineticjsの方法。Kineticjsソースからの例:

Kinetic.Circle = function(config) {
    this._initCircle(config);
};

Kinetic.Circle.prototype = {
    _initCircle: function(config) {
        this.createAttrs();
        // call super constructor
        Kinetic.Shape.call(this, config);
        this.shapeType = 'Circle';
        this._setDrawFuncs();
    },
    drawFunc: function(canvas) {
      /*some code*/
    }
    /* more methods*/
};
Kinetic.Global.extend(Kinetic.Circle, Kinetic.Shape);

2また、coffeescriptで継承することもできます:coffeescript Class しかし、jsでは見栄えが良くありません:

var Gallery,
 __hasProp = {}.hasOwnProperty,
 __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };

Gallery = (function(_super) {

__extends(Gallery, _super);

function Gallery(config) {
  Kinetic.Stage.call(this, config);
}

Gallery.prototype.add = function(item) {
  console.log(item);
  return Gallery.__super__.add.call(this, item);
};

Gallery.prototype.method = function() {
  return console.log('test');
};

return Gallery;

})(Kinetic.Stage);
于 2013-05-07T10:47:16.590 に答える
0

KineticJSソース内で実行される方法に従うことをお勧めします。このブログ投稿では、その方法を説明していますが、少し古くなっているため、カスタムシェイプにプロパティを追加する方法も示す最新の例を紹介します。

Shape.Arc以下のコードは、新しいオブジェクトを作成する例を示しています。このサンプルは、新しい関数とプロパティの両方を追加する方法を示しています。

var Shape = {};
(function () {
    Shape.Arc = function (config) {
        this.initArc(config);
    };
    Shape.Arc.prototype = {
        initArc: function (config) {
            Kinetic.Shape.call(this, config);
            this._setDrawFuncs();
            this.shapeType = 'Arc;'
            drc.ui.utils.setupShape(this);
        },
        drawFunc: function (context) {
            context.beginPath();
            context.arc(0,0, this.getRadius(), this.getStartAngle(), 
                this.getEndAngle(), true);
            context.fillStrokeShape(this);
        }
    };
    Kinetic.Util.extend(Shape.Arc, Kinetic.Shape);

    //Add properties to shape.
    //The code below adds the getRadius(), getStartAngle() functions above.
    Kinetic.Factory.addGetterSetter(Shape.Arc, 'radius', 0);
    Kinetic.Factory.addGetterSetter(Shape.Arc, 'startAngle', 0);
    Kinetic.Factory.addGetterSetter(Shape.Arc, 'endAngle', 180);
})();

複数のインスタンスを作成できるように、無名関数でラップすることが重要です。

アークを作成するには:

var arc = new Shape.Arc({
                radius: radius,
                x: centreX,
                y: centreY,
                startAngle: 0,
                endAngle: Math.PI * 2
            });
于 2013-11-14T20:35:01.827 に答える