Миксин-классы (Mixin)

В прошлом разделе мы разбирали наследование. Некоторое сходство с наследованием имеет использование миксин-классов.

Миксин-классы или миксины представляют такие классы, которые могут быть включены в другие классы. Концепция миксин-классов напоминает множественное наследование в с++, а также использование интерфейсов в языках c# и java, хотя аналогия лишь частичная. Например, у нас есть класс Person, представляющий человека. Пусть у нас есть класс Car, представляющий машину:

Ext.define('Classes.Car', {
	speed:0,
    drive: function(speed) {
		this.speed=speed;
		if(speed>0){
			console.log("Машина едет");
		}
		else{
			console.log("Машина останавливается");
		}
    },
  });
 

Класс машины имеет один метод, который сигнализирует, что машина едет при скорости больше нуля, или что машина останавливается, если скорость равна нулю.

Наш класс Person, то есть человек, может ездить на машине. И подобную функциональность мы можем определить в классе Person, использовав класс Car в качестве миксин-класса:

Ext.define('Classes.Person', {
    mixins: {
		car: 'Classes.Car'
	},
	config: {
			name: 'Eugene',
			surname : 'Popov'
	},
    constructor: function(name, surname) {
        this.initConfig();
		if(name){
			this.setName(name);
		}
		if(surname){
			this.setSurname(surname);
		}
    },
    go: function(speed){
		this.drive(speed);
    },
  });
//использование миксин-класса
var eugene = Ext.create('Classes.Person');
eugene.go(10);
eugene.go(0);
 

Здесь в секции mixins мы указываем миксин-класс. Потом при создании класса на этапе предобработки миксин-классы загружаются, а все их члены объединяются с текущим классом (то есть в данном случае с классом Person). Поэтому к этими членам класса мы модем обращаться с помощью ключевого слова this: this.drive(speed);

    Поддержать сайт на родительском проекте КГБ