Javascript Spotify应用程序,创建自定义模块

Javascript Spotify应用程序,创建自定义模块,javascript,spotify,Javascript,Spotify,我正在尝试开发一个小型Spotify应用程序,但有一些问题。我有一个对象Foo,我想把它保存在一个单独的文件中,并需要保存在我的主文件中。然后在我的主文件中,我想创建如下对象:var baz=newfoo(一些,参数)。但我不能让它工作 我使用的是API的1.0版本,Spotify以某种形式使用了requirejs,对吗 例如: 所以,我试着用两个文件foo.js和main.js这样做 // main.js require([ '$api/models', 'foo'], functio

我正在尝试开发一个小型Spotify应用程序,但有一些问题。我有一个对象
Foo
,我想把它保存在一个单独的文件中,并需要保存在我的主文件中。然后在我的主文件中,我想创建如下对象:
var baz=newfoo(一些,参数)
。但我不能让它工作

我使用的是API的1.0版本,Spotify以某种形式使用了requirejs,对吗

例如:

所以,我试着用两个文件foo.js和main.js这样做

// main.js
require([
  '$api/models',
  'foo'], function(models, Foo) {

  var f = new Foo("hello", "world");

  ...
});

// foo.js
// define() doesn't work? So I tried with require again...?!
require(['$api/models'], function(models) {

  function Foo(some, arg) {
    this.some = some;
    this.arg  = arg;
  }

  Foo.prototype.getSome() { return this.some; }


  return Foo;

});
在执行
newfoo(…)
时,这会在主文件中显示一个错误“对象不是函数”

为什么呢?我想这是因为我在foo.js中使用了require()?那么我应该用什么来代替呢

编辑: 好的,看来我应该使用导出,比如:
exports.myMethod=myMethod


但是我需要导出一个方法,该方法创建并返回一个Foo对象的实例及其所有实例方法等,对吗?

我这样做解决了这个问题:

//foo.js
require(['$api/models'], function(models) {

  var Foo = (function() {
    var foo = function(some, arg) {
        // Do stuff..
    };
    return foo;
  })();

  exports.Foo = Foo;
});
然后在main.js中,我要求如下: 需要(['scripts/foo#foo']]


似乎还可以。但不知道这是否是最好的方法。

也可以,不过在您的示例中,Foo的值是Foo函数。像往常一样编写函数,并将要公开的函数分配给
导出
就足够了。