在JavaScript中this对象上下文作用域

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作用域的上下文可以是我们指定的任何对象

猜你喜欢

转载自my.oschina.net/u/2608890/blog/786290