нашел, проблема в
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 |
Обоже мой. Я уже запарился перечитывать про прототипы, думал, что где-то в prototype пересекаются ссылки.
Оказалось, что я не умею читать документацию к jquery. Огромное спасибо! |
используй лучше это)))
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; } и работала бы в сотни раз быстрее. но мир не без ослов)) |
А как можно при помощи Class вызвать конструктор родителя?
В Coffescript есть вызов "super", а тут есть такое? |
Есть конечно)) эту функцию писали профессионалы 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 ну ты понял ;) я же говорю это обычная обертка над прототипным наследованием)))) просто дико удобная |
На самом деле у этой функции еще есть много фишек, все сразу и не опишешь)
|
Отлично. Это то что нужно. Спасибо!
|
Да а еще можно статические свойства добавлять) например так
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, когда снова создашь топик с этими классами?
|
Цитата:
|
Часовой пояс GMT +3, время: 05:48. |