2015-08-14 83 views
0

我正在處理一個url處理類,並想通過構造函數來訪問它。例如,調用新的Url(「http://www.stackoverflow.com?param=value」)將返回url的不同組件。如何從構造函數中調用另一個Javascript文件中的函數?

雖然我有一個基本的功能工作,我不能夠在不同的文件中使用構造函數。在這種情況下,我想從runner.js的url.js中調用Url。

runner.js

define(['url'], function (url) { 
    "use strict"; 

    function someParsing() { 
    var urlText, url1; 
    urlText = "http://www.stackoverflow.com"; 
    url1 = new Url(urlText); 
    return url1; 
    } 
    return { 
    someParsing: someParsing 
    } 
}); 

url.js

define(function() { 
    "use strict"; 

    function Url(urlText) { 
    return urlText; 
    } 
    return { 
    urlText: urlText 
    } 
}); 

錯誤,我得到

TypeError: 'undefined' is not a constructor (evaluating 'new Url(urlText)')

什麼是正確的方式來設置這個,所以我可以使用URL runner.js中的構造函數?

+1

定義從哪裏來? RequireJS? – zim333311

+0

^您是否使用允許您需要其他模塊的庫或框架? – trickpatty

+0

是的,這是RequireJS。 – analyticsPierce

回答

2

看起來像你使用的是require.js,是嗎?

簡短的回答:

在url.js

define(function() { 
    "use strict"; 
    function Url(urlText) { 
     return urlText; 
    } 
    return Url; 
} 
在runner.js

define(['url'], function (Url) { 

長回答:

請注意,您在一個匿名函數傳遞界定。這是在require.js決定運行它時定義你的模塊的代碼。該函數內的任何var或函數聲明都在本地範圍內。

使對象可用於其他模塊的方式是通過返回它們(來自您的模塊定義函數)。無論你返回的是什麼require.js提供給其他需要你剛定義的模塊的模塊。因此,如果您在url.js中返回Url構造函數,那麼當您在runner.js中詢問'url'模塊時,require.js會將Url構造函數傳遞給您的'runner'模塊定義函數。

+0

感謝您的詳細解釋。非常翔實。正是我需要的。 – analyticsPierce

相關問題