了解knockout如何使用push.apply与javascript对象交互
这可能是另一个javascript作用域问题,具有令人震惊的特点。 在我购买的一本书中,作者介绍了一个单页应用程序的示例,但选择不完全解释javascript,因为它不是本书的重点 我的问题是ajax调用中成功操作中的函数如何理解用作参数的嵌套对象的定义了解knockout如何使用push.apply与javascript对象交互,javascript,jquery,ajax,knockout.js,Javascript,Jquery,Ajax,Knockout.js,这可能是另一个javascript作用域问题,具有令人震惊的特点。 在我购买的一本书中,作者介绍了一个单页应用程序的示例,但选择不完全解释javascript,因为它不是本书的重点 我的问题是ajax调用中成功操作中的函数如何理解用作参数的嵌套对象的定义 outerobj.myarray.push.apply(outerobj.myarray, data.map(function (nestedobj) { nestedobj.prop1 })) The main object var out
outerobj.myarray.push.apply(outerobj.myarray, data.map(function (nestedobj) { nestedobj.prop1 }))
The main object
var outerobj = {
view: ko.observable("View1")
nestedobj : {
prop1 : ko.observable(""),
prop2 : "",
prop3 : ko.observable("")
},
myarray : ko.observableArray([])
}
在后面的Ajax/Jquery选项中,有一个对push.apply的调用,调用如下
var getProperties = function ()
{
$.ajax("/path", {
type: "GET",
success: function (data) {
outerobj.myarray.removeAll();
outerobj.myarray.push.apply(outerobj.myarray, data.map(function(nestedobj) { return nestobj.prop1; }))
outerobj.view("Result");
}
});
}
Array.prototype.push将值推送到数组的“顶部”。它可以接收数量可变的参数,例如:
[1].push(2); //[1,2]
[1].push(2, 3); //[1,2,3]
.apply从给定的作用域执行函数,并应用给定的参数数组。它将数组作为参数展开到函数中。例如:
var arr =[];
[].push.apply(arr, [1,2]); // this is equivalent to arr.push(1,2);
最后,.map返回一个数组。。。因此,基本上,这是一种将项目数组推入数组的好方法。我不知道你在问什么;你能澄清你的问题吗?谢谢,这非常有帮助。您用语句回答了问题。apply从给定范围执行函数。因此,在本例中,outerobj.myarray.push.apply(outerobj.myarray,data.map(函数(nestedobj){return ouberobj.view(“result”)}具有对outerobj的完整范围的本机访问权限。