2016-06-23 10 views
0

이 코드를 설정할 수 없습니다 속성은 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 

이 차별화의 원인은 무엇인지 알 수 없습니다. 제안?

+0

http://stackoverflow.com/questions/762011/let-keyword-vs-var-keyword let과 var의 차이점을 확인하십시오. –

답변

1

우선이 모듈은 이 아니라입니다. 당신은 당신의 기능으로 글로벌 맥락을 오염시키고 있습니다.

jsfiddle에서 엄격 모드를 사용하고 있지 않습니다. 그리고 귀하의 IIFE는 window 컨텍스트에서 호출되고 있습니다. 실제로 ScrollAnim을 확인할 수 있습니다 window입니다. Demo.

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

귀하 실제로 사용 프로젝트는 undefined을 할 this 결과 'use strict';을 사용하고 있습니다. 오류가 발생합니다.

이것은 모듈 패턴입니다.

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

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

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