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做用域的上下文能夠是咱們指定的任何對象