Re[2]: Классы в Javascript
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 11.04.08 04:39
Оценка:
Sinclair,

LCR>>Как я уже успел узнать, классы в js можно эмулировать кучей различных способов, один извращённее другого.

S>Я вот не уверен, что классы в джаваскрипт вообще нужны. Совершенно непонятно, зачем что-то эмулировать. Как правило, это всего лишь отражение дурной привычки к одному языку программирования.

В данном случае мне так удобнее.

S>Имхо, лучше изучить натуральные для JS методики программирования.


Динамическая типизация и интерпретируемость не отменяет необходимости в пользовательских типах данных, операциях над этими данными, ограничении области видимости имён и тому подобных вещах.

Натуральные...

Ты имеешь ввиду например
(function(){
 for (var i; i<n; i++) {
    var j;
 }
})();

для того, чтобы переменные i и j не вылазили за блок?

Или например
function attach()
{
  var element = document.getElementById("my-element");
  element.attachEvent("onclick", function()
    {
      alert("Clicked: " + this.innerHTML);
    }.closure(element));
}

где closure определён как
Function.prototype.closure = function(obj)
{
  // Init object storage.
  if (!window.__objs)
  {
    window.__objs = [];
    window.__funs = [];
  }

  // For symmetry and clarity.
  var fun = this;

  // Make sure the object has an id and is stored in the object store.
  var objId = obj.__objId;
  if (!objId)
    __objs[objId = obj.__objId = __objs.length] = obj;

  // Make sure the function has an id and is stored in the function store.
  var funId = fun.__funId;
  if (!funId)
    __funs[funId = fun.__funId = __funs.length] = fun;

  // Init closure storage.
  if (!obj.__closures)
    obj.__closures = [];

  // See if we previously created a closure for this object/function pair.
  var closure = obj.__closures[funId];
  if (closure)
    return closure;

  // Clear references to keep them out of the closure scope.
  obj = null;
  fun = null;

  // Create the closure, store in cache and return result.
  return __objs[objId].__closures[funId] = function ()
  {
    return __funs[funId].apply(__objs[objId], arguments);
  };
};

чтобы пресечь мемори лики?

Ещё вот я сейчас читаю про пространства имён в javascript. Натуральнее просто некуда.

Или чего ты имел ввиду под словосочетанием "натуральные методики"?
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.