Показать сообщение отдельно
  #15 (permalink)  
Старый 08.10.2012, 23:02
Аватар для Maxmaxmахimus
司会
Отправить личное сообщение для Maxmaxmахimus Посмотреть профиль Найти все сообщения от Maxmaxmахimus
 
Регистрация: 29.02.2012
Сообщений: 198

Есть конечно)) эту функцию писали профессионалы javascript)

this.super() внутри дочернего метода вызовет перекрытый мтеод родителя

function Class(g,h){var d=h||g,a=h?g:null,e=Class.overname||"super",f=function(){if(this.__construct__)return this.__construct__.apply(this,arguments)},i=function(){};i.prototype=a?a.prototype:Class.prototype;d.prototype=new i;f.prototype=new d(f,d.prototype);var c=f.prototype,b;for(b in c)c.hasOwnProperty(b)&&c[b]instanceof Function&&(a=d.prototype[b])&&function(b,d,a){c[a]=function(){var a=this[e];this[e]=d;var c=b.apply(this,arguments);a?this[e]=a:delete this[e];return c}}(c[b],a,b);return f};







var Animal = new Class( function () {
	this.run = function () {
		alert( 'this run!' )
	};
} );



var Cat = new Class( Animal, function () {
	this.run = function (){
		this.super(); // вызываем родительский перекрытый
		alert('...and jump!' ) // добавляем коту дополнительный функционал
	};
} );



var cat = new Cat;
cat.run(); // 'this run!'   // '...and jump!'


п.с. вот это вот слово super можно задавать в Class.overname = 'trololo' если слово super не устраивает))

И кстати

cat instanceof Cat    // true
cat instanceof Animal // true
cat instanceof Class  // true


А так же

Class.prototype.qq = 11;
Animal.prototype.ww = 77;

cat.qq // 11
cat.ww // 77

ну ты понял

я же говорю это обычная обертка над прототипным наследованием)))) просто дико удобная

Последний раз редактировалось Maxmaxmахimus, 09.10.2012 в 18:18.
Ответить с цитированием