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