Kinetic对象的新属性?

时间:2013-08-07 11:37:11

标签: javascript kineticjs

如何通过函数向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;
}

那当然不是动力学的对象。但是我怎么能这样做呢? 是否可以扩展基类以保存自定义值?

1 个答案:

答案 0 :(得分: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;
})();