this

this指向运行时上下文

1.作为对象方法调用时,this指向对象本身
2.作为普通函数调用时,this指向父域。在全局作用域下调用,指向window。在函数内部调用,则指向父函数内部作用域
3.隐式调用时,则会丢到绑定对象。它会指向默认绑定,全局对象或者undefined。

function foo(){
	console.log(this.a);
}

var obj ={
a:2,
foo:foo
};

var bar = obj.foo;
var a = "oops,global"
bar();  //oops,global

虽然bar是obj.foo的一个引用,但是实际上它引用的是foo函数本身,因此bar()其实是一个不带任何修饰的函数调用,此时this指向默认绑定。传参其实也是一个隐式调用,回调函数丢失this绑定是非常常见的。

4.call和apply、bind都动态地改变传入函数的this
apply bind call 改变作用域

const args = [].slice.call(arguments)  //将类似Array的对象、集合转换为新的

applycall都是为了改变函数运行时的上下文。即改变函数体类的this指向。applycall调用时立即执行这个函数。
例如获取document的某子节点列表,这个节点时没有Array.slice 等方法。那么此时 使用Array.prototype.slice.apply 或者call就能实现slice截取功能。

bind 可以让对应函数在任何想调用的时候调用。并返回一个新的函数。在执行时添加参数。
apply的所有参数必须在一个数组中。

如果你传入了一个原始值(字符串类型、 布尔类型或者数字类型) 来当作 this 的绑定对 象, 这个原始值会被转换成它的对象形式(也就是
new String(…)、 new Boolean(…) 或者 new Number(…))。 这通常被称为“装箱”。

5.API调用时的上下文
第三方库的许多函数, 以及 JavaScript 语言和宿主环境中许多新的内置函数, 都提供了一个可选的参数, 通常被称为“上下文”(context), 其作用和 bind(…) 一样, 确保你的回调函数使用指定的 this。

6.构造器调用
使用new来调用函数时,新对象会绑定到函数调用的this。默认情况下,new返回的是this对象。

new 调用函数

  • 创建(或者说构造)一个全新的对象
  • 这个对象会被执行【原型】连接
  • 这个新对象会绑定到函数调用的this
  • 如果函数没有返回其他对象,那么new表达式中的函数调用会自动返回这个新对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值