Показать сообщение отдельно
  #1 (permalink)  
Старый 08.09.2015, 17:22
Профессор
Отправить личное сообщение для caetus Посмотреть профиль Найти все сообщения от caetus
 
Регистрация: 23.09.2014
Сообщений: 197

вопрос о реализации
есть например 3 вида уток
обычная утка: умеет летать , плавать и крякать!
деревянная: только плавать!
резиновая: плавать и крякать !

есть например массив всех уток [] и в переборе нужно вызвать кряканья у всех уток которые это умеют !

одним словом паттерн стратегия !

я сделал так !
хочу услышать ваше мнения на счет этого ...
Рони ? ))

var Duck = (function () {

	var Duck = function (name) {
		if(!(this instanceof Duck)) return new Duck(name);

		this.name = name;
	}

	var F = function () {};


	var proto = {
		duckWooden: Object.create(F.prototype),
		duckUsual: Object.create(F.prototype),
		duckRubber: Object.create(F.prototype)
	}
	
	var obj =  {
		duckWooden: function (name) {
			if(Duck.prototype != proto.duckWooden) 
				Duck.prototype = proto.duckWooden;
			
			return Duck(name)
		},
		duckUsual: function (name) {
		
			if(Duck.prototype != proto.duckUsual)
				Duck.prototype = proto.duckUsual;
			
			return Duck(name)
		},
		duckRubber: function (name) {
		
			if(Duck.prototype != proto.duckRubber)
				Duck.prototype = proto.duckRubber;
			
			return Duck(name)
		},
		prototype: F.prototype
	}
	
	for(var i in proto) {
		proto[i].constructor = obj[i];
		obj[i].prototype = proto[i]
	}

	return obj;

})();

Duck.prototype.fly = function () { console.log('i fly') }
Duck.prototype.quack = function () { console.log('quack quack! my name '+ this.name)	}
Duck.prototype.swim = function () {	console.log('i swim') }


var wooden = Duck.duckWooden('Della')

Duck.duckWooden.prototype.fly = function () {};
Duck.duckWooden.prototype.quack = function () {};
Duck.duckRubber.prototype.fly = function () {};
Duck.prototype.remove = function () {};

var rubber = Duck.duckRubber('Donald')
var usual = Duck.duckUsual('Billi')

rubber.quack()
usual.quack()
wooden.quack()

console.log(wooden, rubber, usual)

Последний раз редактировалось caetus, 08.09.2015 в 17:25.
Ответить с цитированием