如何使用 jquery 扩展 javascript 函数对象以添加新属性?

How to extend javascript Function object using jquery to add new attributes?

我有 javascript 个函数对象 EmployeeClass。此对象的字段由硬编码属性映射。

在 jqgrid jqGridAddEditAfterSubmit 上绑定了一个事件。在这个函数中,我能够读取 json 字符串对象,表示一行 updated/added。 json 字符串表示如下:

{
"Id":"xxx",
"FirstName":"Mr. B",
"LastName":"Ross",
...

}

函数对象定义:

//EMPLOYEE 
function EmployeeClass(empJson){
    this.Id = empJson.Id;
    this.FirstName = empJson.FirstName;
    this.LastName = empJson.LastName;
    ...
    ...

}

绑定函数中使用的代码示例如下:

$("gridid").bind("jqGridAddEditAfterSubmit", function (e, rowid, event) {
   var rowData = ...
   ..
   ..
   //construct object for server
   var oObject = new EmployeeClass(rowData);

   //CALL SERVER SIDE API for store
   SERVERREMOTE.call(oOject,'saveEmployee',...);
});

问题

如果没有动态添加字段,以上代码效果很好。意思是,服务器端可以添加自定义字段,这些字段会动态添加到 jqgrid 中,jqgrid 可以很好地管理 display/edit/add 功能。但是,我现在的问题是,如何将我的 EmployeeClass 对象提交到具有动态添加属性的服务器?我需要一些如何在我的绑定函数 jqGridAddEditAfterSubmit 中扩展我的 EmployeeClass 以便我捕获 jqgrid 传递的所有属性并转换为 EmployeeClass

希望这个场景能解释我的问题。这都是关于在 运行 时间动态扩展 javascript 函数对象。

回答

https://jsfiddle.net/SalesforceDev/cwaek2Ly/

based on new fields present into JSON string, I need to add corresponding fields into my function object

使用类似 var keys = Object.keys(empJson) 的方法从 JSON 数据中获取键作为符号(字符串)数组。

然后使用循环检查您的函数是否使用 .hasOwnProperty(keys[x]) 的那些键。

可以使用 emp[keys[x]] = empJson[keys[x]] 之类的内容轻松添加缺少的属性,其中 x 是新键的索引。请注意,keys[x] 只是一个字符串。