创建自定义对象时出现JavaScript错误

时间:2013-03-17 16:52:05

标签: javascript javascript-objects

我发现当我调用record.create()时,有时它会成功,而有时它会抛出一个错误,说没有这样的方法,即使记录对象的属性设置得恰当。

我是否错误地使用了创建方法? 可能是我遗漏了一些关于JavaScript自定义对象语法的内容。

<script language="javascript" type="text/javascript">

    var record = {
        RecordID : null,
        CustomerID : null,
        CompanyID : null,

        create : function() {
            var obj = new Object();

            obj.RecordID = "";
            obj.CustomerID = "";
           return obj;
        }
    };

   function pageLoad(sender, eventArgs) {
 {
 //*******SUCCEEDS********
 record = record.create()
 }

       function RadGrid1_RowSelected(sender, args) {

        currentRowIndex = args.get_gridDataItem().get_element().rowIndex;

        var dataItem = args.get_gridDataItem().get_dataItem();
        recordId = dataItem["Record_ID"];
        if (tableView.get_selectedItems().length == 1) {
            record = record.create();
            record.RecordID = dataItem["Record_ID"];
            record.CustomerID = dataItem["Customer_ID"];
            setValues();

        }
        else if (tableView.get_selectedItems().length > 1) {
            record= record.create();//****FAILS ALWAYS even when record object has non-null properties*******
        }

        if ($.inArray(recordId, recordIds) == -1) {
            recordIds.push(recordId);
        }
    }

</script>

更新:这对我有用。 我没有在'record'全局对象上使用create方法,而是使用了一种简单的方法。每次我想在记录对象上调用create()方法时,只需调用自定义方法'resetRecord'。这样我没有错误,我的逻辑完美无缺。

    function resetRecord() {
        record.RecordID = "";
        record.CustomerID = "";
        record.CompanyID = "";      
    }

1 个答案:

答案 0 :(得分:3)

在第一次调用后它将无效,因为您正在覆盖record对象。这会破坏任何create()方法,因为返回的对象没有此方法/属性。

对于您的更新,变量具有功能级别范围。您正在使用record内的全局RadGrid1_RowSelected

我不完全确定你在做什么,但这会让你超越你的第一个问题。

function RadGrid1_RowSelected(sender, args) {
        var newRecord;

        currentRowIndex = args.get_gridDataItem().get_element().rowIndex;

        var dataItem = args.get_gridDataItem().get_dataItem();
        recordId = dataItem["Record_ID"];
        if (tableView.get_selectedItems().length == 1) {
            record = record.create();
            record.RecordID = dataItem["Record_ID"];
            record.CustomerID = dataItem["Customer_ID"];
            setValues();

        }
        else if (tableView.get_selectedItems().length > 1) {
            newRecord= record.create();//****FAILS ALWAYS even when record object has non-null properties*******
        }

        if ($.inArray(recordId, recordIds) == -1) {
            recordIds.push(recordId);
        }
    }