Подтвердить что ты не робот

Как я могу избавиться от ключевого слова `this` в локальных функциях?

Я пишу небольшую платформу JavaScript JavaScript и часто использую свойства объектов, например

this.depth = this.y;

Но эти this 'es довольно раздражают @_ @. Есть ли способ написать просто...

depth = y;

... не влияет на глобальный объект?

Мои экземпляры создаются с помощью двух функций factory, и они составляют ограниченный список предопределенных переменных, поэтому все они имеют depth, y и т.д. Функции применяются к экземплярам методом .apply() хотя все это может быть изменено.

Причина, по которой мне нужно опустить ключевое слово this, заключается в том, что структура создана не только для меня, но и для других людей. Мне не нужно удалять this в самой структуре, но ключевое слово this собирает много времени при кодировании приложений на основе этой библиотеки. Единственное решение, которое я знаю до сих пор, заключается в создании переменных 'private', но это создает некоторые неудобства для людей, которые раньше не работали с JavaScript, а манипулирование obj1 из obj2 вызывает много анонимных функций с .apply - еще больше ада. Итак, как я вижу, в JavaScript нет панацеи.

Конструкторы:

/*...*/
'Copy' : function (type) {
  var obj = {
    'x':0,
    'y':0,
    'xprev':0,
    'yprev':0,
    /*...*/
  };
  return obj;
},
'make' : function (type,x,y) {
  obj = ct.types.Copy(type);
  obj.x = obj.xprev = obj.xstart = x;
  obj.y = obj.yprev = obj.ystart = y;

  /*...*/

  ct.stack.push(obj);
}
/*...*/
4b9b3361

Ответ 1

Трудно ответить на ваш вопрос, не видя никакого кода, но в целом "современный" JavaScript OOP, основанный на фабриках и затворах, менее подробный и более идиоматичным, чем старый стиль "wannabe Java" с new и this 'es.

Старый стиль:

function Something() {
   this.depth = 0;
}
Something.prototype.incDepth = function() {
   this.depth++;
}
foo = new Something()

Новый стиль:

function Something() {
   var depth = 0;
   return {
      incDepth: function() {
         depth++;
      }
   }
}
foo = Something()