前置知识:本质上任何函数在执行时都是通过某个对象调用的
this是什么?
- 一个关键字, 一个内置的引用变量
- 在函数中都可以直接使用this
- this代表调用函数的当前对象
- 在定义函数时, this还没有确定, 只有在执行时才动态确定(绑定)的
如何确定this的值?
- test() window
- obj.test() obj
- new test() 新创建的对象
test.call(obj) obj
function Person(color) {console.log(this)this.color = color;this.getColor = function () {console.log(this)return this.color;};this.setColor = function (color) {console.log(this)this.color = color;};}Person("red"); //this是谁? windowvar p = new Person("yello"); //this是谁? pp.getColor(); //this是谁? pvar obj = {};p.setColor.call(obj, "black"); //this是谁? objvar test = p.setColor;test(); //this是谁? windowfunction fun1() {function fun2() {console.log(this);}fun2(); //this是谁? window}fun1();
