call()方法
- call方法可以调用函数,例如
fn.call()
; - call方法可以改变这个函数的this指向,例如
fn.call(thisArg,arg1,arg2,...)
; - 主要应用:call还能够实现继承-----借用父构造函数继承属性;
function Father(uname,age) {
this.uname = uname
this.age = age
}
function Son(uname,age,score) {
Father.call(this,uname,age)
this.score=score
}
let son = new Son('Tony',18,59)
console.log(son)
- 利用原型对象继承方法(这儿跟call关系不大,继承方法跟继承属性挨着写方便记忆)。
function Father(uname,age) {
this.uname = uname
this.age = age
}
Father.prototype.money = function() {
console.log(10000)
}
function Son(uname,age,score) {
Father.call(this,uname,age)
this.score=score
}
Son.prototype = new Father()
Son.prototype.constructor = Son
let son = new Son('Tony',18,59)
console.log(son)
console.log(Son.prototype.constructor)
apply()方法
- apply()方法调用一个函数-----
fun.apply(thisArg,[argsArray])
- thisArg:在fun函数运行时指定的this值
- argsArray:传递的值,必须包含在数组里面
- 主要应用:比如我们可以利用apply借助于数学内置对象求最大值
var arr = [1,16,3,99,4]
var max = Math.max.apply(Math,arr)
console.log(max)
bind()方法
fun.bind(thisArg,arg1,arg2,...)
- bind()方法不会调用函数,但是能改变函数内部的this指向。(bind方法返回的是一个函数,后续需要手动调用)
- 返回由指定的this值和初始化参数改造的原函数拷贝
var o = {
name:'wnz'
}
function fn(){
console.log(this)
}
var f = fn.bind(o)
f()
- 主要应用:如果有的函数我们不需要立即调用,但是又想改变这个函数内部的this指向,此时就可以使用bind方法。
例如:我们有一个按钮,当我们点击了之后,就禁用这个按钮,3秒钟之后开启这个按钮。(类似于页面登陆时发送手机验证码,60s之后才能够重新获取)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<button>click</button>
<script>
var btn = document.querySelector('button');
btn.onclick = function() {
this.disabled = true;
setTimeout(function() {
this.disabled = false
}.bind(this),3000)
}
</script>
</body>
</html>