apply(),call(),bind()都是改变js中this的指向问题。
<!DOCTYPE html><html lang="en">
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title></head>
<body> <script> /* var name = 'zs', age = 14; var obj = { name: 'ls', objAge: this.age, myFun: function() { // this指向的是obj console.log(this.name + "年龄" + this.age); } } console.log(obj.objAge); console.log(obj.myFun());
var fav = '小王';
function shows() { // this指向的是window console.log(this.fav); } shows() */
// ================ // call() apply() bind()都是用来重定向this的 /* var name = "小王", age = 17; var obj = { name: "小张", objAge: this.age, myFun: function() { console.log(this.name + "年龄" + this.age);
} } var db = { name: "蛋蛋", age: 99 } obj.myFun.call(db); obj.myFun.apply(db); obj.myFun.bind(db)(); // bind()返回的是一个函数,你必须执行他才会调用 */ // =============================== var name = "小王", age = 17; var obj = { name: "小张", objAge: this.age, myFun: function(fm, t) { console.log(this.name + "年龄" + this.age, "来自" + fm + "去往" + t);
} } var db = { name: "蛋蛋", age: 99 } obj.myFun.call(db, "成都", "上海"); obj.myFun.apply(db, ["成都", "上海"]); obj.myFun.bind(db, "成都", "上海")(); obj.myFun.call(db, ["成都", "上海"])(); // apply() call() bind() 第一个参数都是this指向后的对象, // call第二个参数是直接放进去的,参数之间用,隔开。 // apply第二个参数放在一个数组里 // bind除了返回的是函数,其余和call一样 </script>
</body>
</html>