javascript - new Object() 不等于 new function Object 如何使它们相等?

标签 javascript kendo-ui javascript-objects

我有一个使用大小写返回对象的函数

    function GetModel(mymodel){

    var mydatamodel = null; 
    switch(mymodel)
    {
    case 'Contact':
    mydatamodel = kendo.data.Model.define({
                                    id: "__KEY",
                                    fields: {
                                    __KEY: { type: "string" },
                                    __STAMP: { type: "number" },
                                    ID: { editable: false, nullable: true },                                                                
                                    firstName: { type: "string" },
                                    middleName: { type: "string" },                                                         
                                    lastName: { type: "string" }
                                    }                               
                                });
                                break;

    case 'Address':
    mydatamodel = kendo.data.Model.define({
                                    id: "__KEY",
                                    fields: {
                                    __KEY: { type: "string" },
                                    __STAMP: { type: "number" },
                                    ID: { editable: false, nullable: true },                                                                
                                    street: { type: "string" }
                                    }                               
                                });
                                break;
    case 'ContactType':     
    mydatamodel = kendo.data.Model.define({
                                    id: "__KEY",
                                    fields: {
                                    __KEY: { type: "string" },
                                    __STAMP: { type: "number" },
                                    ID: { editable: false, nullable: true },                                                                
                                    name: { type: "string" }                                
                                    }                               
                                });
                                break;
    };

    return mydatamodel  
    };

//Try to create new instance
var mymodel = new GetModel("Contact")

现在这个函数确实返回一个对象,但该对象与 使用下面的代码创建一个我需要的新对象

 var mydatamodel = kendo.data.Model.define({
                                    id: "__KEY",
                                    fields: {
                                    __KEY: { type: "string" },
                                    __STAMP: { type: "number" },
                                    ID: { editable: false, nullable: true },                                                                
                                    firstName: { type: "string" },
                                    middleName: { type: "string" },                                                         
                                    lastName: { type: "string" }
                                    }                               
                                });

//Create new object;
var mymodel = new mydatamodel();

这按预期工作并创建 kendoui.datamodel 的新实例,其中 该函数返回 kendoui.data.modal... 作为函数而不是对象的新实例

我希望能够调用 switch 函数,因为我希望此代码位于不同的 .js 文件中,然后位于主 .html 页面中以进行代码分离。那么如何 我让上面的函数 GetModel 的行为方式与 var = kendoui.data.model...正在工作

谢谢

最佳答案

不要在函数中使用 new 运算符。

只需让函数返回一个像这样的实例:

function GetModel(mymodel){

var mydatamodel = null; 
switch(mymodel)
{
case 'Contact':
mydatamodel = kendo.data.Model.define({
                                id: "__KEY",
                                fields: {
                                __KEY: { type: "string" },
                                __STAMP: { type: "number" },
                                ID: { editable: false, nullable: true },                                                                
                                firstName: { type: "string" },
                                middleName: { type: "string" },                                                         
                                lastName: { type: "string" }
                                }                               
                            });
                            break;

case 'Address':
mydatamodel = kendo.data.Model.define({
                                id: "__KEY",
                                fields: {
                                __KEY: { type: "string" },
                                __STAMP: { type: "number" },
                                ID: { editable: false, nullable: true },                                                                
                                street: { type: "string" }
                                }                               
                            });
                            break;
case 'ContactType':     
mydatamodel = kendo.data.Model.define({
                                id: "__KEY",
                                fields: {
                                __KEY: { type: "string" },
                                __STAMP: { type: "number" },
                                ID: { editable: false, nullable: true },                                                                
                                name: { type: "string" }                                
                                }                               
                            });
                            break;
};

return new mydatamodel();
};

并像这样使用你的创建者函数:

var mymodel = GetModel("Contact");

编辑

或者使用这样的代码:

var mymodel = new (GetModel("Contact"))();

关于javascript - new Object() 不等于 new function Object 如何使它们相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14187149/

相关文章:

javascript - 调用从函数返回的对象的函数打印未定义

javascript - 将信息传递到 jQuery ajax 响应处理函数中

javascript - 如何在 Angular 中仅按一个值过滤数据?

javascript - 将文件引用添加到数据库中

javascript - 在 Kendo Grid 客户端模板中使用开关

css - 可以在 Kendo Tabstrip 元素后添加管道分隔符吗?

javascript - JS-洛达什;嵌套对象(父/子)到平面数组

如果检查 Object? Javascript isNAN 返回 false?

javascript - Kendo UI Angular Grid 复选框列表自定义过滤器

javascript - 使用 underscore.js 减少数组元素