标签:-- length 保留 不可 转换 ++ 部分 ref com
var data=[{name:"liuhf",age:19},{name:"wangwu",age:21}] function print_name(){ console.log(this.name) } print_name.call(data[0]) // liuhf /*----------------------------*/ for(var i=0;i<data.length;i++){ console.log(i) data[i].eat=function(){console.log("my index is"+i)} }
1.关于 JavaScript中的 Array.prototype.slice.call( )
function test(){ var _args=Array.prototype.slice.call(arguments); console.log(args); } test(1,3); //[1,3]
此函数可以将 类数组(此处为arguments)转换为真正的数组, 这个方法可以类数组转换成真正数组
。 前提是此对象有length属性。(IE下 Dom节点集合不可转)
1) 先来说一个有趣的分享。
var a_arr=[1,2,3];
a_arr.get=function(){return 0};
由于 a_arr是一个附带get方法的一个数组。大家不用觉得奇怪,数组是对象,这么加个get方法没有毛病。Array.prototype.slice.call(a_arr) // ==>> [1,2,3] 输出变成这样。
说明slice过程会仅仅保留数组部分,不会保留其他杂项。 于是上述灰色代码部分的例子就可以理解了。
2) 关于call的理解。----------------------------- 停止线 -----------------------
2. 关于对象转化数组,类数组转化为数组的一些操作总结。
let array_like_obj = { ‘0‘: ‘a‘, ‘1‘: ‘b‘, ‘2‘: ‘c‘, length: 3 }; real_arr=Array.from(arrayLike) // ==>> ["a", "b", "c"] /*---------------------------------------------------------------*/ let array_like_arr = [1,2,3] ; array_like_arr.get=function(){ return 0 } Array.from(array_like_arr) // [1,2,3]
// 或者
Array.prototype.slice.call(array_like_arr) // [1,2,3]
标签:-- length 保留 不可 转换 ++ 部分 ref com
原文地址:https://www.cnblogs.com/liuliu-hai/p/12399050.html