2

如何通过函数向 Kinetic 对象添加/扩展属性?

让我进一步解释一下。我可以像这样创建一个新的 Kinetic 对象

var car = new Kinetic.Rect({
width: 15,
height: 10});

// 稍后使用 . 添加自定义属性。符号

car.brand = "BMW";

但是如果我想通过这样的功能制作运动物体

var Car1 = new Car(15, 10, "BMW");
var Car2 = new Car(10, 10, "Volvo");

function Car(width, height, brand) {
   this.width = width;
   this.height = height;
   this.brand = brand;
}

那当然不是一个动态物体。但是我该怎么做呢?是否可以扩展基类以保存自定义值?

4

1 回答 1

2

它可以被认为是开箱即用的相对丑陋的,但是是的

var Car = (function() {
    var _super = Kinetic.Rect.prototype,
        method = Car.prototype = Object.create(_super);

    method.constructor = Car;

    function Car(opts, brand) {
        _super.constructor.apply(this, arguments);
        this.brand = brand;
    }

    method.drive = function() {
         //lawl
    };

    return Car;
})();

var bmw = new Car({}, "BMW");
var volvo = new Car({}, "Volvo");

问问自己这辆车是否是动力直角车。对我而言,这种继承没有任何意义,我宁愿拥有一辆具有.boundingBox引用Rectangle实例的属性的汽车。


当您将公共代码提取到某个地方时,它会变得更清晰:

var oop = {
    inherits: function(Child, Parent) {
        Child.prototype = Object.create(Parent.prototype);
        Child.prototype.constructor = Child;
        return Parent.prototype;
    }
};

然后代码看起来像

var Car = (function() {
    var _super = oop.inherits(Car, Kinetic.Rect);

    function Car(opts, brand) {
        _super.constructor.apply( this, arguments );
        this.brand = brand;
    }

    return Car;
})();
于 2013-08-07T11:39:43.733 回答