0

我以这种方式声明了一个 Javascript 类:

function MyClass(params){

    this.setValues=function(params){
        this.myAttr1=params.attr1;
        this.myAttr2=params.attr2;
    }
    this.setValues(params);
}

这样一来我就有MyClass了公共属性myAttr1myAttr2公共功能setValues

当我做

var myObj=new MyClass({attr1:"hi",attr2:"ho"});

对象已正确创建。当我想将此对象作为 jquery ajax 调用中的参数发送时,问题就来了:

 $.ajax({
            type: "POST",
            url: "insert.php",
            dataType: 'json',
            data: {id: "1", obj:myObj});

此时我收到一个错误,因为setValues中的参数未定义。所以这个 ajax 调用正在尝试运行(我现在不知道为什么)。setValues()

我找到了一个解决方案,它创建了一个只返回内部属性的函数myClass

this.getValues=function(){
    return {myAttr1:this.myAttr1,myAttr2:this.myAttr2};
}

接着

$.ajax({
            type: "POST",
            url: "insert.php",
            dataType: 'json',
            data: {id: "1", obj:myObj.getValues()});

但是每当我添加一个属性时,我必须记住将它返回到getValues().
我想有一个更好的解决方案。也许我没有遵循声明类的最佳实践。

4

1 回答 1

0

而不是.getValues您应该实现一个.toJSON函数来处理将您的类序列化为 JSON。当您的对象被字符串化(通过对 JSON.stringify 的底层调用)时,它将自动调用.toJSON.

于 2013-01-09T16:47:29.460 回答