Skip to content

this指向哪? #42

Open
Open
@coderInwind

Description

@coderInwind

显示绑定

在独立调用函数时,this指向调用的当前作用域对象

隐式绑定

如果是obj.foo()这样的方式调用obj对象里的函数foo,那么foo的this就会被隐式绑定到obj上

var obj = {
	name:"你的名字是?"
	foo:function(){
			console.log(obj.name)
		}
	bar:function(){
			console.log(this.name)
		}
}

obj.foo()
obj.bar()

this的指向不是在创建时就决定了,而是由执行环境决定的,包括全局环境、对象环境、构造函数环境、事件对象

apply-call-bind

apply和call可以指定this的绑定对象,他们的第一个参数都为this的指向对象
但传入函数的参数call是逐个传入,而apply是传入一个包含参数的数组
let newFn = fn.bind("aaa")
可以通过bind生成一个新的函数,在调用这个函数时,this指向他的参数
当参数传入一个null或者undfined时,this会被绑定到window上

new绑定

通过new调用一个函数(构造器时),this指向创建出来的对象

function foo(name,age){
	this.name= name
	this.age = age
}

let fn = new foo("张三",18)

绑定的优先级

当两个或多个形式的绑定都出现了,那么应该遵从哪一个哪?
经过测试
new绑定>显式绑定>隐式绑定>默认绑定

箭头函数

箭头函数没有自己的this,箭头函数使用的this是他parentScope中的this

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions