【问题标题】:New properties to Kinetic objects?动力学对象的新属性?
【发布时间】:2013-08-07 23:06:49
【问题描述】:

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

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

【问题讨论】:

    标签: javascript kineticjs


    【解决方案1】:

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

    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;
    })();
    

    【讨论】:

    • 谢谢哥们。正如您所说,该解决方案似乎有点“丑陋”:-)。但这是你需要走的路吗?我的意思是,如果你想用一些额外的数据创建数百个对象,你可能想通过一个函数来做到这一点,对吧?
    • @Walex 我的意思是这可以开箱即用,不需要单独的“继承库”
    • @Walex 当你有单独的代码时,我添加了一个更简洁的示例
    猜你喜欢
    • 2012-12-22
    • 1970-01-01
    • 2016-09-09
    • 1970-01-01
    • 2019-07-29
    • 2014-07-17
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    相关资源
    最近更新 更多