Javascript.RU

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

нашел, проблема в
jQuery.extend(true, this.defaultOptions, options);

jQuery.extend изменяет и возвращает this.defaultOptions.

таким образом мы всем присваиваем в свойство this.options ссылку на один и тот же обьект this.defaultOptions)))))

лол можешь проверить

objs[1].options === objs[3].options //true
objs[2].options  === objs[1].defaultOptions //true

Последний раз редактировалось Maxmaxmахimus, 08.10.2012 в 15:23.
Ответить с цитированием
  #12 (permalink)  
Старый 08.10.2012, 15:29
Аспирант
Отправить личное сообщение для bFree Посмотреть профиль Найти все сообщения от bFree
 
Регистрация: 19.08.2008
Сообщений: 42

Обоже мой. Я уже запарился перечитывать про прототипы, думал, что где-то в prototype пересекаются ссылки.

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

используй лучше это)))


function extendObject( parent, child ) {
	function F (){}
	F.prototype = parent;

	var instance = new F;
	for ( var key in child )
	  instance[key] = child[key];

	return instance
}


за место
jQuery.extend(true, this.defaultOptions, options);


пиши

extendObject( this.defaultOptions, options );


______________________________________
п.с. если бы не существовало ишака, то функция extendObject выглядела бы вообще так
function extendObject (){
    child.__proto__ = parent;
    return child;
}

и работала бы в сотни раз быстрее.
но мир не без ослов))

Последний раз редактировалось Maxmaxmахimus, 08.10.2012 в 15:36.
Ответить с цитированием
  #14 (permalink)  
Старый 08.10.2012, 16:39
Аспирант
Отправить личное сообщение для bFree Посмотреть профиль Найти все сообщения от bFree
 
Регистрация: 19.08.2008
Сообщений: 42

А как можно при помощи Class вызвать конструктор родителя?
В Coffescript есть вызов "super", а тут есть такое?
Ответить с цитированием
  #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.
Ответить с цитированием
  #16 (permalink)  
Старый 09.10.2012, 02:55
Аватар для Maxmaxmахimus
司会
Отправить личное сообщение для Maxmaxmахimus Посмотреть профиль Найти все сообщения от Maxmaxmахimus
 
Регистрация: 29.02.2012
Сообщений: 198

На самом деле у этой функции еще есть много фишек, все сразу и не опишешь)
Ответить с цитированием
  #17 (permalink)  
Старый 09.10.2012, 11:05
Аспирант
Отправить личное сообщение для bFree Посмотреть профиль Найти все сообщения от bFree
 
Регистрация: 19.08.2008
Сообщений: 42

Отлично. Это то что нужно. Спасибо!
Ответить с цитированием
  #18 (permalink)  
Старый 09.10.2012, 17:56
Аватар для Maxmaxmахimus
司会
Отправить личное сообщение для Maxmaxmахimus Посмотреть профиль Найти все сообщения от Maxmaxmахimus
 
Регистрация: 29.02.2012
Сообщений: 198

Да а еще можно статические свойства добавлять) например так



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 Cat = new Class( function ( static ) {

	// static ссылается на то, что возвращает функция Class (на то что потом кладется в Cat)
	static.count = 0; // статическое свойство count 

	this.__construct__ = function () {
		static.count++
	};
} );


// теперь в Cat лежит класс котов, и через этот класс можно получить доступ к статическим свйоствам ни создав ни одного кота

alert( Cat.count ) //0

new Cat;
new Cat;
new Cat;

alert( Cat.count ) //3

Последний раз редактировалось Maxmaxmахimus, 09.10.2012 в 18:10.
Ответить с цитированием
  #19 (permalink)  
Старый 10.10.2012, 11:14
Аватар для Hekumok
Отправить личное сообщение для Hekumok Посмотреть профиль Найти все сообщения от Hekumok
 
Регистрация: 04.06.2012
Сообщений: 513

Maxmaxmахimus, когда снова создашь топик с этими классами?
__________________
★ ²º¹³ ☆
Ответить с цитированием
  #20 (permalink)  
Старый 10.10.2012, 11:47
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Hekumok
Maxmaxmахimus, когда снова создашь топик с этими классами?
Maxmaxmахimus, видишь, народ требует хлеба и зрелищ
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прототипы в JS Harvey Общие вопросы Javascript 3 06.12.2011 11:00
Как смотреть данные добавлены к объекты через data()? TicTac jQuery 4 04.05.2011 08:48
Что такое прототипы Deniskan Общие вопросы Javascript 7 03.08.2010 16:06
Объекты в массиве. delias Общие вопросы Javascript 2 21.04.2010 22:28