直接上例子
例 1
obj.objAge; // 17
obj.myFun(); // 小张年龄 undefined
例 2
shows(); // 盲僧
比较一下这两者 this 的差别,第一个打印里面的 this 指向 obj,第二个全局声明的 shows() 函数 this 是 window ;
1,call()、apply()、bind() 都是用来重定义 this 这个对象的!
obj.myFun.call(db); // 德玛年龄 99
obj.myFun.apply(db); // 德玛年龄 99
obj.myFun.bind(db)(); // 德玛年龄 99
以上出了 bind 方法后面多了个 () 外 ,结果返回都一致!
注意:bind()方法被调用时,创建了一个新的函数。
2,对比call 、bind 、 apply 传参情况下
obj.myFun.call(db,'成都','上海'); // 德玛 年龄 99 来自 成都去往上海
obj.myFun.apply(db,['成都','上海']); // 德玛 年龄 99 来自 成都去往上海
obj.myFun.bind(db,'成都','上海')(); // 德玛 年龄 99 来自 成都去往上海
obj.myFun.bind(db,['成都','上海'])(); // 德玛 年龄 99 来自 成都, 上海去往 undefined
微妙的差距!
从上面四个结果不难看出:
call()、bind()、 apply() 这三个方法的第一个参数都是 this 的指向对象,第二个参数差别就来了:
call() 接受的是 参数列表。
apply() 接受的是 参数数组。
bind() 除了返回是函数以外,它的参数和 call() 一样,接受的是 参数列表。