javascript 不是构造函数

javascript not a constructor

我正在尝试创建一个 Javascript 对象,但它给出了致命的不是构造函数对象。代码有什么问题。

form = new Form(data,option);
str = form.JsonToHTML();

下面是方法,

 define([
  'jquery',
  'underscore',
  'backbone',
  'router/router'
  ], function($, _, Backbone, Router) {

   var form = function(data, options) {
       this.data  = data;
       this.options = options,
       this.JsonToHtml = function() {
            alert(Backbone);
            alert(this.data);
    }
};

return form; 
});

您还没有定义一个名为 Form 的函数,但是您可以通过创建一个空对象并使用 call 方法调用您的表单函数来模拟它。

var form = {};
formFunc.call(form, data, option);
form.JsonToHtml(); // will work

您似乎没有正确加载 form 模块。你应该像这样加载它:

define(['form'], function(Form) {
    var form = new Form(data,option);
    var str = form.JsonToHTML();
    //your code
});

您正在使用的 form 模块是 AMD module。这些工作的方式是您创建一个局部变量(函数参数)来引用您的代码所依赖的每个模块。在这种情况下,您希望将表单构造函数引用为 Form 以便 new Form 起作用,这就是我在上面的示例中调用函数参数 Form 的原因。

我不确定form模块是你写的还是别人写的,但是如果你能改变它,最好将函数重命名为Form (带有大写字母 F)还有,为了保持一致性,因为构造函数以大写字母开头是 JS 中的标准约定。

我建议这样编写 form 模块:

 define([
  'jquery',
  'underscore',
  'backbone',
  'router/router'
  ],
  function($, _, Backbone, Router) {

   function Form(data, options) {
       this.data  = data;
       this.options = options;
    }

    Form.prototype.jsonToHtml = function() {
        alert(Backbone);
        alert(this.data);
    }

    return Form; 
});