Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
了解knockout如何使用push.apply与javascript对象交互_Javascript_Jquery_Ajax_Knockout.js - Fatal编程技术网

了解knockout如何使用push.apply与javascript对象交互

了解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

这可能是另一个javascript作用域问题,具有令人震惊的特点。 在我购买的一本书中,作者介绍了一个单页应用程序的示例,但选择不完全解释javascript,因为它不是本书的重点

我的问题是ajax调用中成功操作中的函数如何理解用作参数的嵌套对象的定义

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的完整范围的本机访问权限。