JavaScript里的this(1)

1. this可以隐式传递对象的引用。

2. this的绑定和函数声明的位置没有任何关系,只取决于函数的调用方式。

3. this是在函数被调用时发生的绑定,它指向什么完全取决于函数在哪里被调用。

4. this默认绑定到全局对象。只有函数运行在非strict mode下时,默认绑定才能绑定到全局对象;在严格模式下调用函数则不影响默认绑定。

5. 隐式绑定this时,需要在一个对象内部包含一个指向函数的属性,并通过这个属性间接引用函数,从而把this间接(隐式)绑定到这个对象上。

6. 函数的call()、apply()方法可以实现this的显示绑定。

7. 回调函数会发生this绑定丢失的情况。硬绑定可以解决这个问题。ES5提供了硬绑定的内置方法Function.prototype.bind。bind(...)会返回一个硬编码的新函数,它会把你指定的参数设置为this的上下文并调用原始函数。

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

var obj = {
    a:2
};
var bar = function() {
    foo.call(obj); //显示的强制绑定,即硬绑定。
};

bar(); // 2
setTimeout(bar, 100); // 2

// 硬绑定的bar不可能再修改它的this
bar.call(window); // 2

8. 包括内置对象在内的所有函数都可以用new来调用,这种函数调用被称为构造函数调用。实际上并不存在所谓的“构造函数”,只有对于函数的“构造调用”。

发生构造函数调用时,会自动执行下面的操作:

(1)创建(或者说构造)一个全新的对象。

(2)这个新对象会被执行[[Prototype]]连接。

(3)这个新对象会绑定到函数调用的this。

(4)如果函数没有返回其他对象,那么new表达式中的函数调用会自动返回这个新对象。

function foo(a) {
    this.a = a;
}
var bar = new foo(2); // 构造一个新的对象并把它绑定到foo(..)调用中的this上
console.log(bar.a); // 2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值