2017-01-04 6 views
0

공개 모듈 패턴을 사용하여 코드를 구성하려하지만 myComponent가 함수 오류가 아닙니다. 흠 무엇이 잘못 되었나요?함수가 자바 스크립트의 함수가 아닙니다.

var canva = new fabric.Canvas('canvas'); 
var myComponent = function(canva) { 

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


    return { 
     init:init 
    }; 

}(canvas); 

myComponent(canva).init(); 
+1

'function (canva) {'은 단일 속성 인 init이라는 함수를 반환하는 IIFE입니다. 이는 myComponent가 함수가 아니라 반환 된 객체라는 것을 유의하십시오. –

답변

1

로 사용 : 그러나

var myComponent = function(canva){ 
    //function body 
}(canvas); 

을, 당신은 함수를 호출하지해야 그것을 데칼 링 한 후, 그래서, 당신은 다음과 같은 sy ntax 대신 :

var myComponent = function(canva){ 
    //function body 
}// remove : (canvas); 
0

시도 :

var myComponent = function(canva){ 

     var init = function(){ 
     console.log('init') 
     } 


     return{ 
     init:init 
     } 

    }; 

// 그리고 당신이 구문을 사용

myComponent(null).init(); 
1

당신은 있지만 둘 다 기본적으로 캔버스 기능을 초기화 또는 PARAM로 제공 할 수 있습니다.

또는

var canva = new fabric.Canvas('canvas'); 
var myComponent = function(canva){ 

    var init = function(){ 
    console.log('init') 
    } 


    return{ 
    init:init 
    } 

}; 

myComponent(canva).init(); 

(이 변형은 구성 요소의 소비자의 경우 유용

var canva = new fabric.Canvas('canvas'); 
    var myComponent = function(canva){ 

    var init = function(){ 
    console.log('init') 
    } 


    return{ 
    init:init 
    } 

}(canva); 

myComponent.init(); 

(구성 요소의 소비자/클라이언트가 사용하는 캔버스/의존성을 구성 할 필요가없는 경우이 변형 유용합니다)/클라이언트가 자신의 구성 요소에 매개 변수화 된/사용자 정의 종속성을 제공해야 함)

0

간단히 말하자면, 파서의 문제이므로 s (아래 코드 참조)

파서가 함수 내부 전역 또는 의 기능 키워드를 발견

는 그것이로서의 기능 선언 (문장) 으로 처리되지 괄호 기능 요정-호출 함수 식입니다. 명시 적으로 구문을 예상하도록 파서에 지시하지 않으면 함수 선언에 이름이 필요하므로 은 이름이없는 함수 선언 인 것으로 확인하고 SyntaxError 예외를 throw합니다. 위의 정확한 표현에 대한

신용에 간다 : http://benalman.com/news/2010/11/immediately-invoked-function-expression/

var myComponent = (function(canva) { 

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

    return { 
    init:init 
    }; 

})(canvas); 

var canva = new fabric.Canvas('canvas'); 
myComponent.init(); 

또한, myComponent.init();myComponent(canva).init();을 변경합니다. myComponent은 기능이 아닙니다.

관련 문제