2013-10-26 6 views
2

는 :backbone.js - "새"키워드 다음에 괄호가 필요합니까? 내가 backbone.js 및 제출에 codeschool.com의 튜토리얼을 통해 일한지

var AppRouter = new Backbone.Router.extend({ 
    //code 
}); 
$(function(){ AppRouter.start() }); 

과는 다음과 같은 오류 메시지가 준 :

TypeError: 'undefined' is not a function (evaluating 'AppRouter.start()') :28 :14 

을하지만, 하나의 괄호를 추가하는 문제를 해결

var AppRouter = new (Backbone.Router.extend({ 
    //code 
})); 

이전에 작동해야하는 것처럼 느껴졌습니다. 괄호가 덜 듭니까?

답변

3
이것은 괄호 생성자 인자로 Backbone.Router.extend 호출 함수 생성자로서 사용)를 반환 Backbone.Router.extend 호 (아닌 결과를가는. 예를 들어, 비교 (생성자로 Backbone.Router.extend를 사용 하였다

:

function Test() 
{ return function() { this.a = 2; }; 
} 

console.log(new Test()); // function() { this.a = 2; } 
console.log(new (Test())); // { a: 2 } 
1

다른 방법을 답변, 당신은 당신이 먼저 자신의 라우터 확장 할 수 있습니다 Backbone.Router의 인스턴스로 작업 할 필요가 예를 들면 :.

var AppRouter = Backbone.Router.extend({ 
    routes: { 
     // code 
    } 
}); 

var router = new AppRouter(); 
Backbone.history.start(); 

당신의 예제의 코드 평가는이다 먼저 확장 호출을 호출 한 다음 반환 값을 사용하여 인스턴스를 만듭니다. 최종 결과는 동일하지만 괄호로 인해 평가가 수행되는 것을 모르는 경우 약간 오도 할 수 있습니다.