来自jquery的嵌套原型

时间:2012-01-12 23:40:56

标签: javascript jquery ajax wcf

我在Web上看到以下示例,以便从WCF服务将json Product对象转换为js:

function Product(ProductName, ProductDesc, Price, Quantity) {
    this.ProductName = ProductName;
    this.ProductDesc = ProductDesc;
    this.Price = Price;
    this.Quantity = Quantity;
}

function CallWCFService(WCFServiceURL) {
    $.ajax({
        type: "GET",
        url: WCFServiceURL,
        contentType: "application/json; charset=utf-8",
        dataType: 'json',
        processdata: true,
        success: function (msg) {
            WCFServiceSucceeded(msg);
        },
        error: WCFServiceFailed
    });
}

//On Successful WCF Service call 
function WCFServiceSucceeded(result) { 
    var productsArray = new Array(); 

    //Gets the Products 
    $.each(result, function (i, Product) { 
        productsArray[i]=Product; 
    }); 

    //Print all the product details 
    $.each(productsArray,function(i,Product) 
    { 
        alert(Product.ProductName + ' ' + Product.ProductDesc + ' ' + Product.Price + ' ' + Product.Quantity) 
    });
}

(original source)

现在,我不能说这里应该发生什么(我在javascript和jquery中的知识很小),但我可以说我想要理解这个片段,以便能够按顺序修改它包含嵌套类型,即:而不是ProductName,我们将从WCF服务响应中获得具有自己字段的列表属性。

现在,具体来说,在这个例子中,我不明白被调用的Product函数在哪里,它似乎就在这里:

 //Gets the Products 
    $.each(result, function (i, Product) { 
        productsArray[i]=Product; 
    }); 

但对我而言,似乎不清楚Product是否存在表现为传递给$ .each的lambda的声明参数,或者它是否实际调用'constructor'调用

你能告诉我这段代码吗?

1 个答案:

答案 0 :(得分:3)

永远不会调用Product函数。事实上,没有它,代码工作得非常好。发生的事情是WCF调用返回的JSON对象与Product类(由Product函数定义)的格式或结构完全相同。

each函数接受一个数组,对于数组中的每个项,它执行提供的匿名函数。匿名函数有两个参数iProducti是数组中项的索引。 Product是传入项的变量的名称。此时,名为Product的变量已隐藏Product函数。

项目已转换为Product类的原因是因为对象具有相同的结构。