如何在另一个javascript中调用基于javascript OOPS的类

时间:2014-08-11 05:31:16

标签: javascript

我有一个名为“LayoutProcessor”.js的javascript类,定义如下:

define('layoutProcessor', ['jquery'], function($) {
  "use strict";
  function LayoutProcessor() {
    return (this);
  }

  LayoutProcessor.prototype.process = function() {
    console.log('inside process');
  };

  LayoutProcessor.prototype.responseHandler = function() {
    console.log('inside responseHandler');
  };

  return new LayoutProcessor();
});

我正在尝试访问名为“test.js”的另一个javascript类中的方法“process”,其定义如下:

test.js

require(['LayoutProcessor.js','jquery'], function(layoutProcessor,$) { 
  $(document).ready(function(){
   var response = new LayoutProcessor().process();
  });
})

但是我收到了类型错误:

  

new LayoutProcessor()不是构造函数。

3 个答案:

答案 0 :(得分:1)

根据OP的实施,它应该是

var response = layoutProcessor.process();

不是

var response = new LayoutProcessor().process();

请参阅 fiddle

enter image description here

错误消息是合适的,因为它不是构造函数而是对象。

new LayoutProcessor() is not a constructor.

LayoutProcessor.js返回Object

return new LayoutProcessor();

答案 1 :(得分:0)

这些代码很少发生。

当前编写的方式,LayoutProcessor模块返回构造对象,而不是要调用的构造函数。

要调用它,您可以使用:

var response = layoutProcessor.process();

然而,这是一个单身人士,我怀疑你是什么意思。

在单例中,如果是layoutProcessor,则只有一个实例,因为该实例是由LayoutProcessor模块创建的。

我相信您所说的代码更像是这样,您可以为需要它的每个人创建对象的新实例:

<强> layoutProcessor

define('layoutProcessor', ['jquery'],
  function($) {

    "use strict";
    //----------------------------------------
    /**
     * constructor
     */
    function LayoutProcessor() {
      return (this);
    }

    LayoutProcessor.prototype.process = function() {

      console.log('inside process');

    };

    LayoutProcessor.prototype.responseHandler = function() {
      console.log('inside responseHandler');

    };

    // Note: Return a FUNCTION reference to be called later.
    return LayoutProcessor;
  }
);

<强> test.js

require(['LayoutProcessor.js', 'jquery'],
  function(LocalLayoutProcessor, $) {

    $(document).ready(function() {

      var response = new LocalLayoutProcessor().process();
    });

  }
)

答案 2 :(得分:0)

唯一问题是return声明。它应该是

return LayoutProcessor;