改变this指向的三种方式

这周想分享一下我之前考核不知道的一个知识点,即改变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'

三种方法的区别
改变this指向的三种方式_第1张图片

你可能感兴趣的:(前端,javascript)