【问题标题】:javascript object literal instantiationjavascript 对象字面量实例化
【发布时间】:2016-05-15 20:04:21
【问题描述】:

我是 js oop 的新手,我不明白我该怎么做。

我有

var Cadastro = Object.create(QForm);
var options = {
    myInstanceName: "Cadastro",
    dependentListsMode: "one",
    defaultButtons: ['enter-query', 'new']
}
Cadastro.initForm(options);

然后我有 QForm.js

var QForm;
QForm = {
    initForm: function (parms) {       
        $.extend(this, parms);        
        var frmObj = $(this.formId);
        this.userRestrictions(parms);       
        $(this.currentForm).find("a[data-form-action]").hide();
        this.clearForm();
        this.disableFields();
    },

问题是,如果我在同一页面中有 e 对象,this.currentForm 具有最新实例化对象的值。

QForm.js 是一个非常丰富的文件,包含很多方法。我该如何管理这个。谢谢

【问题讨论】:

  • 你在哪里设置this.currentForm
  • 您似乎对对象、实例和类感到困惑。
  • this.currentForm 在选项中,我删掉了它,因为有太多属性。不要混淆对象、类或实例。但是 Robusto 你是对的,qform 是一个对象而不是一个类
  • QForm 是对象文字,我必须使用构造函数。就这样?
  • 另外,如果您在一个独立的小型示例中重现您的问题会很好,您可以从我的答案中的代码开始并扩展它以显示问题。

标签: javascript oop object


【解决方案1】:

一般来说,您的代码可以正常工作,它使用Object.create 基于QForm 原型创建新实例,并且新实例不共享属性,这是一个简短的工作示例:

var QForm;
QForm = {
    initForm: function (parms) {       
        $.extend(this, parms);        
        this.frmObj = $(this.formId);
    }
};

var cadastro = Object.create(QForm);
var options = {
    myInstanceName: "Cadastro",
    formId: "CadastroForm",
    dependentListsMode: "one",
    defaultButtons: ['enter-query', 'new']
}
cadastro.initForm(options);

var formTwo = Object.create(QForm);
var options = {
    myInstanceName: "FormTwo",
    formId: "test",
    dependentListsMode: "one",
    defaultButtons: ['enter-query', 'new']
}
formTwo.initForm(options); 

alert(cadastro.formId);
alert(formTwo.formId);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

如果你运行它,你会看到CadastroForm,然后是test,所以基于QForm创建的两个实例有不同的formId属性。

【讨论】:

  • 虽然很难从 OP 发布的内容中判断出什么问题,但这应该会有所帮助
  • @LeonelMatiasDomingos 有了这个示例后,只需编辑您的问题并将所有详细信息和示例放入其中,同时查看whole 'asking' help section,这里有一些关于提出好问题的有用提示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-01
相关资源
最近更新 更多