JavaScript中的this

来源:互联网 发布:手机没有网络adb调试 编辑:程序博客网 时间:2024/05/03 10:20
①全局作用域下,this就是window(浏览器环境)

(1)全局作用域下创建一个返回this的函数,this仍为全局对象(window);

(2)但严格模式规定,全局作用域下的函数中的return this会返回undefined;

②只要将函数作为对象方法,this就指向这个对象

(1)将函数作为一个对象的方法调用时,this指向拥有这个方法的对象

(2)即使通过对象字面量创建对象,再将函数赋值给对象的属性,这个函数中的this仍然指向这个对象。


③对象原型链上的this

通过Object.create()创建一个以o为原型对象的空对象赋值给b,此时为b创建a,b属性,调用原形中的f()方法,执行结果为b.a+b.b。因此this指向了新创建的对象。

④get()和set()方法里的this
与一般对象方法类似,this也指向它们的上级对象。

⑤构造器中的this

(1)定义这样一个构造器Foo(),function Foo(){this.a=1;}
若这个构造函数没有返回值或return的是基本类型值,那么会将this作为返回值,而如果return了一个对象,那么会将return的对象作为返回值。
此时创建这个构造函数的实例var b=new Foo();

若直接调用Foo(),这里的this就会指向window,而创建实例后,这里的this会指向一个空对象,并且这个对象的__proto__属性指向Foo的prototype.也就是这个空对象也就是new Foo().

(2)若在构造器中返回一个对象包含这样一个属性和值时,新创建的实例的这个属性就不再是this.a中的属性。


⑥call()与apply()方法中的this

(1)使用call()跟apply()方法时,第一个参数就是要指定的this对象,其他为参数列表。

(2)call()和apply()可以将一些对象调用一些不能直接使用的方法。


⑦ES5的bind()方法

(1)bind()方法有一个参数,参数是一个对象,这个对象就是要绑定的this对象。

(2)bind()对于我们需要将函数绑定到一个对象并且需要重复调用这种绑定的关系时比apply()和call()方便。

在将b绑定到对象o并赋值给c后,在o1内部的c中this仍然指向o,并不会指向它的上级对象o1.
0 0
原创粉丝点击