apply() & call() & bind()
同:用於改變函數中this 的指向
異:apply()和call()使用傳參不同;apply()和call()可以實現函數調用,而bind()不能
function fn(a, b) {
console.log(this);
console.log(a, b);
}
var obj = {
a: 10
}
//fn.call(obj,1,2);
// apply()
//fn.apply(obj,[1,2]);
// bind()可以改變函數中this指向 但它不會調用函數
// 返回由指定this值和初始化參數改造的原函數拷貝,原函數不受影響
var newFn = fn.bind(obj, 1, 3);
newFn();
//apply()第二種使用場景
var arr = [10, 12, 45, 38];
var max = Math.max.apply(null, arr);
console.log(max);
bind()案例:
<body>
<button id='btn'>接受驗證碼</button>
<script>
var btn = document.querySelector('#btn');
var num = 10;
btn.onclick = function() {
//var that = this;
this.innerHTML = '剩餘時間'+num + "s";
setInterval(function() {
num--;
this.innerHTML = '剩餘時間'+num + "s";
}.bind(this),1000);
}
</script>
</body>