71 lines
1.8 KiB
HTML
71 lines
1.8 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>Document</title>
|
||
<script>
|
||
// call,apply 用其他函数的方法
|
||
function add(a,b){
|
||
return a+b;
|
||
}
|
||
function sub(a,b){
|
||
return a-b;
|
||
}
|
||
var a1 = add.apply(sub,[4,2]); //sub调用add的方法
|
||
var a2 = sub.apply(add,[4,2]);
|
||
// alert(a1); //6
|
||
// alert(a2); //2
|
||
|
||
/*call的用法*/
|
||
var a1 = add.call(sub,4,2); //sub调用add的方法
|
||
console.log(a1)
|
||
|
||
// 实现继承 cat 继承animal
|
||
function Animal(name){
|
||
this.name = name;
|
||
this.showName = function(){
|
||
alert(this.name);
|
||
}
|
||
}
|
||
|
||
function Cat(name){
|
||
console.log(this)
|
||
Animal.apply(this,[name]); // this new以后指向的是他的实例,cat 但是cat的构造函数里面通过apply把当前的this指向了animal
|
||
//所以他实例出来的对象cat 就能用 animal里面的属性和方法
|
||
}
|
||
|
||
var cat = new Cat("咕咕");
|
||
cat.showName();
|
||
|
||
/*call的用法*/
|
||
Animal.call(this,name);
|
||
|
||
|
||
// bind
|
||
var a = {
|
||
b : function(){
|
||
var func = function(){
|
||
console.log(this.c);
|
||
}
|
||
func.bind(this)(); //等价于 this.func()
|
||
},
|
||
c : 'Hello!'
|
||
}
|
||
a.b();
|
||
//Hello!
|
||
</script>
|
||
</head>
|
||
<body>
|
||
<p> call和apply的作用都是 修改this的指向</p>
|
||
<p> call和apply 操作的都是函数 而不是对象</p>
|
||
<p>区别:
|
||
<p>call 需要的参数都写上(单独的)</p>
|
||
<p>apply 需要的参数 如果有多个的话,需要用数组的形式传过去</p>
|
||
</p>
|
||
<p>bind()方法主要就是将函数绑定到
|
||
<p>f.bind(obj),实际上可以理解为obj.f()</p>
|
||
</p>
|
||
</body>
|
||
</html> |