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

如何使用jquery扩展javascript函数对象以添加新属性?,javascript,jquery,jqgrid,free-jqgrid,Javascript,Jquery,Jqgrid,Free Jqgrid,我有javascript函数对象EmployeeClass。该对象的字段由硬编码属性映射 jqgrid jqGridAddEditAfterSubmit上绑定了一个事件。在这个函数中,我能够读取json字符串对象,该对象表示正在更新/添加的行。 json字符串表示如下: { "Id":"xxx", "FirstName":"Mr. B", "LastName":"Ross", ... } $("gridid").bind("jqGridAddEditAfterSubmit", functio

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

jqgrid jqGridAddEditAfterSubmit上绑定了一个事件。在这个函数中,我能够读取json字符串对象,该对象表示正在更新/添加的行。 json字符串表示如下:

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

}
$("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',...);
});
函数对象定义:

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

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

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

}
$("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在功能上漂亮地管理显示/编辑/添加。但是,我现在的问题是,如何使用动态添加的属性将EmployeeClass对象提交到服务器?我需要了解如何在绑定函数jqGridAddEditAfterSubmit中扩展EmployeeClass,以便捕获jqgrid传递的所有属性并转换为EmployeeClass

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

答复

基于JSON字符串中出现的新字段,我需要添加 我的函数对象中的相应字段

使用类似于var keys=Object.keysempJson的方法从JSON数据中以符号字符串数组的形式获取键

然后使用循环检查函数是否具有使用.hasOwnPropertykeys[x]的键


缺少的属性可以很容易地添加到emp[keys[x]=empJson[keys[x]],其中x是新键的索引。请注意,键[x]只是一个字符串。

没有json对象这样的东西——json总是一个字符串,或者它不是json。您理解我的问题了吗?如果不理解这个问题,高声誉的人怎么能在没有正当理由的情况下进行否决投票呢?我不理解你的问题,也不是一个–所以我否决了它,投票结束了它,因为不清楚你在问什么,因为。。。不清楚你在问什么。我的名声与此无关。那样的话,你应该要求更详细的解释。事实上,我没有责任教你——相关的:向橡皮鸭详细解释你的问题。这个想法是,完全彻底地解释你的问题往往能解决问题。您的问题使用了不正确的术语、不完整的代码粘贴、糟糕的格式和拼写错误。您在寻求帮助时表现出最小的努力,但期望得到高质量的回答。我很失望。[…]从JSON数据中获取密钥[…]如果empJson真的是JSON,那么必须首先使用JSON.parseempJson对其进行解析,以获得一个常规JavaScript对象,您可以在该对象上调用Object.keys。如果empJSON只是一个普通的JavaScript对象,那么它不是JSON,Object.keysempJson可以直接使用,但是JSON的命名是错误的。在这种情况下,jqGrid应该处理解析,假设指定了正确的数据类型:选项。这可能是真的。但是从JSON数据[…]结合Object.keysempJson获取密钥的措词[…]是错误的。如果empJson确实包含JSON数据,那么它不会返回编码为JSON的对象的键,因为JSON数据是一个字符串。要么它是一个JavaScript对象,然后Object.keysempJson将起作用,要么它是JSON,然后必须对其进行解析。具有讽刺意味的是,Javascript是目前唯一一种没有JSONObject类的语言,因为它不需要JSONObject类。尽管如此,混合使用json编码的数据和javascript对象通常是许多关于json的问题的根源。如果JS文档讨论JSON数据,那么它将始终是一个字符串。因此,如果你写了一个答案,你总是要用正确的词。