this指针
this
this是执行上下文中的一个属性。
影响了函数代码中this值的变化有几个因素:
首先,在通常的函数调用中,this是由激活上下文代码的调用者来提供的,即调用函数的父上下文(parent context )。this取决于调用函数的方式。
为了在任何情况下准确无误的确定this值,有必要理解和记住这重要的一点。正是调用函数的方式影响了调用的上下文中的this值。
作为构造器调用的函数中的this
function A() {
alert(this); // "a"对象下创建一个新属性
this.x = 10;
}
var a = new A();
alert(a.x); // 10
new运算符调用“A”函数的内部的[[Construct]方法,接着,在对象创建后,调用内部的[[Call]]方法。 所有相同的函数“A”都将this的值设置为新创建的对象。
附上一段代码:
<script>
// "foo"函数里的alert没有改变
// 但每次激活调用的时候this是不同的
function foo() {
console.log(this);
}
// caller 激活 "foo"这个callee,
// 并且提供"this"给这个 callee
foo(); // 全局对象
foo.prototype.constructor(); // foo.prototype
var bar = {
baz: foo
};
bar.baz(); // bar
(bar.baz)(); // also bar
//调用这个方法之前先加了一个括号。加上括号后好像只是引用一个函数,但是this值得到了维持。因为bar.baz和(bar.baz)的定义相同
(bar.baz = bar.baz)(); // 这是一个全局对象
// 上面这条语句,先执行了一条赋值语句,然后再调用赋值后的结果。因为这个赋值表达式的值是函数本身,所以就返回了“the window”
(bar.baz, bar.baz)(); // 也是全局对象
(false || bar.baz)(); // 也是全局对象
var otherFoo = bar.baz;
otherFoo(); // 还是全局对象
</script>
未完成,更新中!!!
上篇:
ajax全接触[慕课网]
下篇:
闭包