1:在函数调用模式中,例如:
function ninja(){};
ninja();
var samurai = function() {};
samurai();
这个函数的this作用域全局上下文即Windows对象
2:在方法调用模式中,例如:
var o = {};
o.whatever = function () {};
o.whatever();
这个函数的this作用域的上下文就是这个对象
3:在构造器调用模式中,例如:(注意:构造函数首字母大写)
function Ninja(){
this.skulk = function(){ return this;}
}
var ninja1 = new Ninja();
var ninja2 = new Ninja();
assert(ninja1.skulk() === ninja1, "The 1st ninja is skulking");
assert(ninja2.skulk() === ninja2, "The 2nd ninja is skulking");
this作用域的上下文就是为创建的新对象
4:apply/call调用模式中,例如:
function forEach(list, callback){
for (var n = 0; n < list.length; n++){
callback.call(list[n], n);
}
}
var list = ['shuriken', 'katana', 'nunchucks'];
forEach(list,function(index){
console.log(index);
console.log(this);
assert(this == list[index], "Got the expected value of “+ list[index]);
})
this作用域的上下文可以是我们指定的任何对象