2016-06-23 11 views
0

Dieser Code funktioniert in JSfiddle: https://jsfiddle.net/estevancarlos/w8yo3mp4/1/Musterfehler Modul: Kann nicht gesetzt Eigenschaft undefined

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(); 

aber es nicht In meinem aktuellen Projekt nicht funktioniert, http://veve.io/wip2. Ich erhalte den Fehler:

Uncaught TypeError: Cannot set property 'init' of undefined 

Ich weiß nicht, was diese Differenzierung verursacht. Vorschläge?

+0

http://stackoverflow.com/questions/762011/let-keyword-vs-var-keyword Überprüfen Sie den Unterschied zwischen Let und Var –

Antwort

1

Zunächst ist dies nicht ein Modulmuster. Sie verschmutzen den globalen Kontext mit Ihren Funktionen.

In jsfiddle verwenden Sie nicht den strikten Modus. Und Ihr IIFE wird in window Kontext aufgerufen. Sie können überprüfen, ScrollAnim ist eigentlich window. Demo.

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

Ihr actuall Projekt wird mit 'use strict'; in this resultierenden undefined zu sein. Was wiederum den Fehler verursacht.

Dies ist Modulmuster;

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

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

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