Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.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
Javascript []拼接.应用或[]拼接.推送等_Javascript - Fatal编程技术网

Javascript []拼接.应用或[]拼接.推送等

Javascript []拼接.应用或[]拼接.推送等,javascript,Javascript,在过去的几天里,我一直在研究一些数组方法,看到了一些类似于[].splice.apply和[].push.apply以及一些参数的东西 例如,现在我想我明白了 var tuna = ['bob', 'john' , 'papa' , 'greg']; var newArr = [] tuna.splice(0,2,"hello"); console.log(tuna); 将输出hello,papa,greg,因为它删除了第0个标记中的2个术语 我还知道apply在以下上下文中是如何工作的 va

在过去的几天里,我一直在研究一些数组方法,看到了一些类似于
[].splice.apply
[].push.apply
以及一些参数的东西

例如,现在我想我明白了

var tuna = ['bob', 'john' , 'papa' , 'greg'];
var newArr = []
tuna.splice(0,2,"hello");
console.log(tuna);
将输出hello,papa,greg,因为它删除了第0个标记中的2个术语

我还知道apply在以下上下文中是如何工作的

var person = {
    firstname: 'John',
    lastname: 'Doe',
    getFullName: function() {

        var fullname = this.firstname + ' ' + this.lastname;
        return fullname;

    }
}

var logName = function(lang1, lang2) {

    console.log('Logged: ' + this.getFullName());
    console.log('Arguments: ' + lang1 + ' ' + lang2);
    console.log('-----------');

}
var logPersonName = logName.bind(person);
logPersonName('en');
logName.call(person, 'en', 'es');
logName.apply(person, ['en', 'es']);

那么,当我们将这两种方法结合起来,或者使用push和apply时会发生什么呢?举个简单的例子会很有帮助。

您可能会看到:

var foo = Array.prototype.slice.apply(arguments)
这采用了
Array
slice
方法,即
slice
的规范实现,并在类似数组的对象上使用它,并返回一个数组。这是一种将类似数组的对象转换为实际数组的速记方法。这纯粹是因为它是实现这一目标的最短、最方便的方法
slice
碰巧处理任何类似于数组的对象并返回实际数组,当不使用其任何附加参数时,它不会对数组执行任何其他操作;这就是为什么它可以方便地用于此目的。它真的滥用了切片方法,这不是它设计的目的,但因为它在任何地方都能工作。。。好的,我们正在使用它

例如:

var o = {};
o[0] = 'foo';
o[1] = 'bar';
o.length = 2;

这是一个类似数组的对象,但它没有任何实际的数组方法。我不能执行
o.push('baz')
,因为
o
不是实际的数组。要将其转换为实际数组,我将使用上述方法,然后可以将其视为实际数组。

[].splice.push
没有意义
[].splice.apply
可以,因为“apply”是函数原型上函数的名称。现在,
[].push.apply
也有道理,原因与此类似。是的,出于某种原因,我不假思索地键入了它。谢谢你的更正谢谢,你有使用.splice.apply的例子吗?我知道这不是一个典型的用法,但我相信在某些情况下它很方便。提出你自己虚构的场景。顺便问一下,你在这里解释“应用”的方式与我举的例子不同吗?我只学会了在这种情况下使用它,它并没有本质上的不同,不。要理解的关键是函数和对象是非常松散地绑定在一起的。即使函数是在对象(通常称为“方法”)上定义的,您也可以将该函数应用于您想要的任何其他对象,而不必是原始对象。这一切都是在通话时间决定的,而不是定义时间<代码>应用是实现这一点的一种方法,使用现有函数,不管它来自何处,并且,将其应用于其他内容。