slice

slice() 是数组的方法可从已有的数组中返回选定的元素;

1
arr.slice(start,end)

返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素

1
2
var arr = [1,2,3,4,5,6];
arr.slice(1,3) // 返回 [2, 3]

call

call() 方法是预定义的 JavaScript 方法;

通过 call(),能够使用属于另一个对象的方法,常用于对象、类式等继承;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function Animal(){
this.name = 'Animal'
}

Animal.prototype.walk = "I can walk";

function Dog(){
Animal.call(this); // 继承Animal 自身方法 注意:call并不会继承原型上的方法
this.say = function(){
console.log('汪');
}
}

var dog = new Dog()
dog.name // Animal 继承Animal自身属性name
dog.say() // 汪
dog.walk // undefined Animal原型walk属性,不会被继承

Array.prototype.slice.call

Array.prototype.slice.call()能将有length属性的类似数组的对象转换为数组;

前提是这个对象的key必须是 0 1 2 … 这样的数字,并且一定要有length属性;

例1:定义一个类数组对象,通过此方法转换成数组

1
2
var obj = { 0: 'one', 1: 'two', length: 2 } 	// 定义一个对象
Array.prototype.slice.call(obj) // ["one", "two"] 传入ob对象,返回数组

例2:像通过document.getElementsByTagName这种获取页面中所有div标签的方法返回的也是类数组对象

1
2
var divList = document.getElementsByTagName('div')
Array.prototype.slice.call(obj) // 数组

但有一个例外,IE下的节点集合它不能转换(因为IE下的dom对象是以com对象的形式实现,js对象和com对象不能进行转换;