如何扩展JavaScript对象/函数以在初始化后公开API方法?

时间:2011-04-13 18:18:47

标签: javascript function object

我想创建一个像这样工作的javascript应用程序:

  • 有一个名为bm的函数/命名空间。
  • 在开始时,bm只是一个具有setup方法的函数,所以有两件事情可能:调用bm()或定义一些调用bm.setup(settings)的设置变量。
  • 要使用该库并公开API,必须先调用函数bm来初始化bm(url, options)。如果成功初始化,则应公开API,以便bm现在有其他方法,例如bm.method1bm.method2,...

我不知道这究竟是怎么可能的,所以我想听听任何想法,例子或建议。提前谢谢。

3 个答案:

答案 0 :(得分:3)

有什么不错的功能是一流的对象,所以你可以为它们添加方法。然后你的主要实例创建函数只需要检查并确保它被称为实例:

var bm = function(settings) {
    if (!(this instanceof bm)) {
        return new bm(settings);
    }

    // Now we are sure we are working with
    // a new instance. Let's do stuff here 
    // to our new object.
}

bm.setup = function(settings) {
    return new bm(settings);
}

这可以称为以下任何一种方式:

var myObj = new bm();

var myObj = new bm(settings);

var myObj = bm();

var myObj = bm(settings);

var myObj = bm.setup(settings);

答案 1 :(得分:0)

也许像......

function bp ( url, options ) {
    if ( !url || !options)
        return 'You fail mister';

    //declare stuff here:
    this.aMethod = function() {...};
    this.anAttribute = true;

    return this;
}
bp.setup = function( settings ) {
    return new bp( predefinedURL, settings);
}

答案 2 :(得分:0)

我在这里看不到任何问题。您可能希望向bm()添加一个回调函数,该函数在API初始化时调用,如下所示:

onAPIInitialized = function() { use the API };
bm(url, options, onAPIInitialized);

您可以将函数添加到bm,就像普通对象一样:

bm.method1 = function(...) {}