模块模式错误:无法设置undefined的属性

时间:2016-06-23 08:07:45

标签: javascript module-pattern

此代码适用于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 个答案:

答案 0 :(得分:2)

首先,这是模块模式。您正在使用您的函数污染全局上下文。

在jsfiddle上你没有使用严格模式。而你的IIFE正在window上下文中被调用。您可以检查ScrollAnim实际上是windowDemo

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

您的所有项目正在使用'use strict';,因此thisundefined。这又会导致错误。

这是模块模式;

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

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

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