Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Пересоздаю тему! (https://javascript.ru/forum/project/21131-peresozdayu-temu.html)

Solovei95 30.08.2011 11:11

Пересоздаю тему!
 
Все темы были неудачными! Было плохое настроение!
Пробуйте теперь такой код!
(function(){
var global = (function(){return this;})();


//Image Loader
global.loadImage = function(src,onload){
  var img = new Image();
  img.src = src;
  img.onload = onload;
  return img;
};


//DOM Object
global.DOM = function(element){
  var init = new xDOM(element);
  return init;
};


//Init DOM
var xDOM = function(element){
  var elem = element;
  this.attr = function(src){
    DOM.prototype.attr(elem,src);
    return this;
  }
  this.css = function(src){
    DOM.prototype.css(elem,src);
    return this;
  }
  this.event = function(src){
    DOM.prototype.event(elem,src);
    return this;
  }
};


  //Set Attributes
DOM.prototype.attr = function(elem,src){
  if(src==null){src={}}
  for(var i in src){
    elem.setAttribute(i,src[i]);
  }
}

  //Set CSS
DOM.prototype.css = function(elem,src){
  if(src==null){src={}}
  for(var i in src){
    if(typeof elem.style.setProperty != "undefined"){
      elem.style.setProperty(i,src[i],null);
    } else {
      elem.style.setAttribute(i,src[i]);
    }
  }
}

  //Event Attach
DOM.prototype.event = function(elem,src){
  if(src==null){src={}}
  for(var i in src){
    if(elem.addEventListener) {
      elem.addEventListener(i, src[i], false);	
    } else
    if(elem.attachEvent) {
      elem.attachEvent('on' + i, function(e){func.call(src[i], e);});
    }
  }
}

})();

Льюк 30.08.2011 11:18

А как вы темы создаёте, у меня не получается?

melky 30.08.2011 11:36

каждый раз при вызове DOM будет создаваться новый объект (это ничего) и к нему каждый раз будут добавляться свойства (это уже плохо)
//DOM Object
global.DOM = function(element){
  var init = *!*new xDOM(element);*/!*
  return init;
};

//Init DOM
var xDOM = function(element){
  var elem = element;
  *!*this.attr*/!* = function(src){
    DOM.prototype.attr(elem,src);
    return this;
  }
  *!*this.css*/!* = function(src){
    DOM.prototype.css(elem,src);
    return this;
  }
  *!*this.event*/!* = function(src){
    DOM.prototype.event(elem,src);
    return this;
  }
};

вам уже об этом намекали, и я писал код, который добавляет эти свойства не к новому объекту, а к прототипу объекта. попробуйте так же

B@rmaley.e><e 30.08.2011 11:44

Цитата:

Сообщение от Solovei95
Пересоздаю тему!

Невероятно осмысленное название для темы.

Да Вы ещё и ничему не учитесь. Прочитайте что-нибудь об объектах и прототипах в JS, что ли.

Kolyaj 30.08.2011 11:52

Solovei95,
вы почти чемпион по созданию никому не понятных тем, скоро nemo переплюнете.

Solovei95 30.08.2011 14:12

xDOM и DOM это совершенно разные вещи!
Умейте различать. А если все равно видите минус - то покажите правильный код!!!

B@rmaley.e><e 30.08.2011 15:16

Цитата:

Сообщение от Solovei95
xDOM и DOM это совершенно разные вещи!

И что с того? Свойства-то Вы назначаете в конструкторе xDOM, чей экземпляр и создаете.
Более того, в Вашем случае конструктор DOM будет возвращать объект "типа" xDOM.

А правильно так:
// DOM cons
var DOM = function(element){
  this._element = element;
};

DOM.prototype = {
  attr : function(attr){return this._element.getAttribute(attr)}
  // …
};

global.DOM = DOM;

Solovei95 30.08.2011 16:33

Да понял я вас!
Вот еще вариант!
(function(){
var global = (function(){return this;})();


//Image Loader
global.loadImage = function(src,onload){
  var img = new Image();
  img.src = src;
  img.onload = onload;
  return img;
};


var xDOM = function(elem){
  var init = new DOM(elem);
  return init;
}

//DOM Object
var DOM = function(element){
  this._elem = element;
};

//Set Attributes
DOM.prototype.attr = function(src){
  if(src==null){src={}}
  for(var i in src){
    this._elem.setAttribute(i,src[i]);
  }
  return this;
}

//Set CSS
DOM.prototype.css = function(src){
  if(src==null){src={}}
  for(var i in src){
    if(typeof this._elem.style.setProperty != "undefined"){
      this._elem.style.setProperty(i,src[i],null);
    } else {
      this._elem.style.setAttribute(i,src[i]);
    }
  }
  return this;
}

//Event Attach
DOM.prototype.event = function(src){
  if(src==null){src={}}
  var self = this;
  for(var i in src){
    (function(i){
      if(self._elem.addEventListener) {
        self._elem.addEventListener(i, src[i], false);	
      } else
      if(self._elem.attachEvent) {
        self._elem.attachEvent('on' + i, function(e){ src[i].call(self._elem, e); });
      }
    })(i);
  }
  return this;
}

global.DOM = xDOM;

})();

Solovei95 30.08.2011 16:48

Я прошу пересмотреть данную функцию еще раз!

B@rmaley.e><e 30.08.2011 17:57

Так уже лучше.


Часовой пояс GMT +3, время: 21:34.