我在何时使用.prototype扩展对象以及何时不使用它时感到非常困惑。就像下面的部分代码一样,为什么不在.prototype中使用FacebookApi.defaults.prototype仅用于函数吗?

+function ($) { "use strict";
  var FacebookApi = function () {
    return
  }
  FacebookApi.defaults = {
    request_url: null
  }
  FacebookApi.prototype.request = function (options) {
    $.ajax({
        url: options
      , cache: true
      , method: 'GET'
      , dataType: 'jsonp'
      , success: function (data) {
        FacebookApi.prototype.userinfo(data)
      }
    })
    return
  }
  window.facebookapi = new FacebookApi();

  $(document)
    .on('load', facebookapi);

}(window.jQuery);

最佳答案

我不确定示例代码的来源,但是如果希望子类能够访问它,或者如果希望通过prototype访问它,则通常要使用this

示例代码中的defaults对应于Java中的static变量-可以在类内或类外轻松引用它,但是您不能使用this.defaults来获取它。而且,子类将无法覆盖,并且只能访问完全限定的名称(FacebookApi.defaults)-尽管在您的示例中,您在函数内部声明了FacebookApi,所以它仅在其中可见。

希望这有助于澄清一下!

09-25 19:54