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

时间:2013-01-06 21:48:18

标签: javascript kendo-ui javascript-objects

我有一个使用case返回对象的函数

    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 ...正在运作

谢谢,

1 个答案:

答案 0 :(得分:2)

请勿在您的功能上使用新操作符。

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

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"))();