2013-08-07 2 views
2

Как добавить/расширить свойства к кинетическим объектам через функцию?Новые объекты для кинетических объектов?

Позвольте мне подробнее пояснить. Я могу создать новый объект Kinetic, подобный этому

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

// и позже добавлять пользовательские свойства. нотация

car.brand = "BMW";

Но если я хочу, чтобы kinectic объектов с помощью функции, как этого

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

Это, конечно, не быть кинетическим объектом. Но как я могу это сделать? Возможно ли расширить базовый класс для хранения пользовательских значений?

ответ

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

Спасибо человеку. Решение кажется немного «уродливым», как вы сказали :-). Но так ли это вам нужно? Я имею в виду, если вы хотите создать сотни объектов с некоторыми дополнительными данными, которые вы, вероятно, захотите сделать с помощью функции справа? – Walex

+0

@Walex Я имею в виду, что это работает из коробки, не требуя отдельной «библиотеки наследования» – Esailija

+0

@Walex Я добавил пример немного более чистого способа, когда у вас есть отдельный код – Esailija

Смежные вопросы