1:在函数调用模式中,例如:app
function ninja(){};函数
ninja();this
var samurai = function() {};对象
samurai();作用域
这个函数的this做用域全局上下文即Windows对象io
2:在方法调用模式中,例如:console
var o = {};function
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做用域的上下文能够是咱们指定的任何对象