<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title> 函数上下文调用之bind方法 </title>
<script>
// bind用法跟call是一毛一样的, 只是效果不一样;
// 用法:函数.bind(要修改的this指向,参数1,参数2,...参数n);
//效果不一样:
//用call的时候会立刻调用函数
//用bind的时候不会调用, 而是返回一个修改了this指向的新函数
function f1 (a,b) {
console.log(a,b);
console.log(this);
};
var obj = {name:"jack"};
f1.call(obj,10,20); // call 会立即调用;
// bind相当于会把函数里的this和参数绑死在函数里返回这个新函数
var res = f1.bind(obj,100,200);
res();
// 只改掉this,不绑死参数
var res1 = f1.bind(obj);
// 调用的时候传多少就是多少
res1(101,202);
var obj1 = {name:"jack"};
obj1.sayHi = function () {
console.log(this);
};
var obj2 = {name:"rose"};
// 这里产生一个新的函数,新的函数里的this绑死了obj1
obj2.sayHi = obj1.sayHi.bind(obj1);
obj2.sayHi() // jack的obj了
</script>
</head>
<body>
</body>
</html>
网友评论