2015-08-12 5 views
0

в самом классе Vector2, если я использую следующиечто случилось со следующим закрытием функции?

Vector2.prototype.aaaScalar: (function() { 

     var min = new Vector2(); 

     return function (minVal) { 

      min.set(minVal); 

      return this.aaa(min); 

     }; 

    })(), 

Он сообщает мин не имеет установленного метода, но Там установлен метод в Vector2

Если изменения к следующему, все в порядке

Vector2.prototype.aaaScalar: (function() { 

     var min; 

     return function (minVal) { 

      if (min === undefined) { 

       min = new Vector2(); 

      } 

      min.set(minVal); 

      return this.aaa(min); 

     }; 

    })(), 

Редактировать: Я проверил в первом случае вызов var min = new Vector2(); не возвращает мне полностью созданный объект.

+1

Оба эти фрагмента хорошо выглядят для меня. Я не знаком с API-интерфейсом threes, но я попробовал простую альтернативу с массивом вместо Vector2, и он отлично работает. – Ghazgkull

+0

Если у вас есть шанс создать проект [codepen] (http://codepen.io) или что-то подобное, чтобы продемонстрировать проблему? – DanZimm

+0

Довольно уверен, что я понял, что должно произойти. Я добавил ответ ниже. – Ghazgkull

ответ

1

Проблема здесь не в вашем закрытии. Оба ваших примера верны, поскольку закрытие идет ... aaaScalar получает назначение на внутреннюю функцию, которую вы возвращаете, с переменной min в ее закрытии.

Разница между двумя фрагментами - это выбор времени. В первом примере var min = new Vector2() выполняется во время установки свойства aaaScalar ... при запуске IIFE. Во втором примере min = new Vector2() не запускается до тех пор, пока вы фактически не вызовете функцию, назначенную aaaScalar.

Я думаю, вы обнаружите, что библиотека вы получаете Vector2 из не готова в то время aaaScalar назначен, но является готов к тому времени, вы на самом деле вызвать aaaScalar().

+0

ваш ответ меня шокирует. почему это вызвано сроками. Могу ли я доверять закрытию fucntion? –

+0

Могу ли я исправить это, если я настаиваю на использовании form1? –

+0

Во втором примере min = new Vector2() не запускается до тех пор, пока вы фактически не вызовете функцию, назначенную aaaScalar. Я хочу знать, почему? –

Смежные вопросы