javascript不是构造函数

时间:2015-07-01 00:34:15

标签: javascript oop require

我正在尝试创建一个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; 
});

2 个答案:

答案 0 :(得分:0)

您尚未定义名为Form的函数,但您可以通过创建空对象并使用<x class="do-not-care-about-spaces">It can go either way here.</x> <y class="please-no-spaces">These</y> <y class="please-no-spaces">Should</y> <y class="please-no-spaces">Touch</y> 方法调用表单函数来模拟此函数。

即。

call

答案 1 :(得分:0)

看起来您没有正确加载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; 
});