Ошибка шаблона модуля: невозможно установить свойство undefined

Этот код работает в JSfiddle: https://jsfiddle.net/estevancarlos/w8yo3mp4/1/

let ScrollAnim = (function() {
    console.log('ScrollAnim loaded');

    this.init = function() {
        console.log('init loaded');
    };

    this.getScenes = function() {
        console.log('getScenes loaded');
    };

    return this;
})();

ScrollAnim.init();
ScrollAnim.getScenes();

Однако это не работает в моем реальном проекте, http://veve.io/wip2. Я получаю ошибку:

Uncaught TypeError: Cannot set property 'init' of undefined

Я не знаю, что вызывает эту дифференциацию. Предложения?

1 ответ

Прежде всего, это не шаблон модуля. Вы загрязняете глобальный контекст своими функциями.

В jsfiddle вы не используете строгий режим. И ваш IIFE вызывается в window контекст. Вы можете проверить свои ScrollAnim на самом деле window, Демо

console.log(ScrollAnim === window); //true

Ваш актуальный проект использует 'use strict'; в результате чего this быть undefined, Что в свою очередь вызывает ошибку.

Это шаблон модуля;

let ScrollAnim = (function() {
    console.log('ScrollAnim loaded');

    return {
      init: function() {
        console.log('init loaded');
      },

      getScenes: function() {
        console.log('getScenes loaded');
      }
    };
})();
Другие вопросы по тегам