深入理解Javascript中的this关键字
自从接触javascript以来,对this参数的理解一直是模棱两可。虽有过深入去理解,但却也总感觉是那种浮于表面,没有完全理清头绪。
但对于this参数,确实会让人产生很多误解。那么this参数到底是何方神圣?
理解this
this是一个与执行上下文(executioncontext,也就是作用域)相关的特殊对象。因此,它可以叫作上下文对象(也就是用来指明执行上下文是在哪个上下文中被触发的对象)。
任何对象都可以做为上下文中的this的值。在一些对ECMAScript执行上下文和部分this的描述中的所产生误解。this经常被错误的描述成是变量对象的一个属性。再重复一次:
this是执行上下文的一个属性,而不是变量对象的一个属性。这个特性非常重要,因为与变量相反,this从不会参与到标识符解析过程。换句话说,在代码中当访问this的时候,它的值是直接从执行上下文中获取的,并不需要任何作用域链查找。this的值只在进入上下文的时候进行一次确定。
废话不多,先看一个板栗:
vartest=function(){};
test.prototype={ foo:"apple", fun:function(){ this.foo="banana"; } };
varmyTest=newtest(); myTest.fun();
console.log(myTest.hasOwnProperty("foo")); //输出什么 console.log(myTest.hasOwnProperty("fun")); //输出什么