call apply 和 bind

三者的定義能夠看MDN知乎也有相關討論很詳細,下面記錄一下用三者寫出的便利方法數組

借用String轉換大寫的方法來轉換 數組 和 布爾值

String.prototype.toUpperCase.call(true)
// 'TRUE'
String.prototype.toUpperCase.call(['a', 'b', 'c'])
//"A,B,C"
複製代碼

把類數組對象轉爲數組

Array.prototype.slice.call({ 0: 'a', 1: 'b', length: 2 })
// ['a', 'b']

Array.prototype.slice.call(document.querySelectorAll("div"));
Array.prototype.slice.call(arguments);
複製代碼

借用數組的indexOf方法應用到類數組對象

<ul class="tab-nav">
    <li>tab1</li>
    <li class="tab-li2">tab2</li>
    <li class="tab-li3">tab3</li>
</ul>
var tabNav=document.querySelector('.tab-nav');
var tabLis=document.querySelectorAll('.tab-nav>li');
tabNav.addEventListener('click',function(e){
  var index = Array.prototype.indexOf.call(tabLis,e.target)
  console.log(index)
})
複製代碼

用 apply 將數組添加到另外一個數組

var array = ['a', 'b'];
var elements = [0, 1, 2];
array.push.apply(array, elements);
console.info(array); // ["a", "b", 0, 1, 2]
複製代碼

用apply求取最大/最小值

/* 找出數組中最大/小的數字 */
var numbers = [5, 6, 2, 3, 7];

/* 應用(apply) Math.min/Math.max 內置函數完成 */
var max = Math.max.apply(null, numbers); /* 基本等同於 Math.max(numbers[0], ...) 或 Math.max(5, 6, ..) */
var min = Math.min.apply(null, numbers);
複製代碼
相關文章
相關標籤/搜索