这周想分享一下我之前考核不知道的一个知识点,即改变this指向的三种方式:
1.call()方法
function.call(thisArg, 参数1, 参数2, 参数3…)
function: 要改变this指向的原函数
thisArg: 要改变到的this指向的目标对象
function fun (name) { this.name = name console.log(this) } var obj = { name: 'dpn', b: function () { console.log(this.name) } } fun.call(obj, 'dulin') //把fun函数的this指向改变到obj函数,改变的name是obj中的name this输出obj对象,并且name改变为'dulin'
2.apply()方法
function.apply(thisArg, [参数1, 参数2, 参数3…])
function: 要改变this指向的原函数
thisArg: 要改变到的this指向的目标对象
function fun (name) { this.name = name console.log(this) } var obj = { name: 'dpn', b: function () { console.log(this.name) } } fun.apply(obj, ['dulin']) //把fun函数的this指向改变到obj函数,改变的name是obj中的name this输出obj对象,并且name改变为'dulin'
3.bind()方法
funtion.bind(thisArg, 参数1, 参数2, 参数3…)
function: 要改变this指向的原函数
thisArg: 要改变到的this指向的目标对象
该方法并不会调用函数,仅仅改变了this指向
function fun (name) { this.name = name console.log(this) } var obj = { name: 'dpn', b: function () { console.log(this.name) } } var fun1 = fun.bind(obj, 'dulin') fun1() //把fun函数的this指向改变到obj函数,改变的name是obj中的name this输出obj对象,并且name改变为'dulin'
三种方法的区别