javascript函数调用上下文this

  1. 普通函数调用:  f();
    1. ecmascript3和非严格ecmascript5中this为全局对象,   ecmascript5严格模式下this为undefined
    2. 普通函数调用通常不关心this,   不过可以用它判断是否处于严格模式
      1 var strict = (function() { return !this; }());

       

  2. 方法调用: o.m();
    1. m中的this为调用对象o
    2. 方法返回this可构造链式调用
    3. this没有作用域限制,   嵌套函数不会从调用它的函数中继承this,   如果嵌套函数作为方法调用,   其this为调用它的对象.   如果作为普通函数调用,  遵守第一种调用方式
    4. 嵌套函数如果需要访问外部函数的this,   需要将this保存在外部函数变量中
       1 var o = {
       2   m: function()
       3   {
       4     var self = this;
       5     console.log(this === o);  // true
       6     f();
       7     
       8     function f()
       9     {
      10       console.log(this === o); // false
      11       console.log(self === o); // true
      12     } // end f()
      13     
      14   } // end m()
      15 };

       

  3. 构造函数:  new f()
    1. 没有形参的构造函数调用可以省略圆括号如:   new  Object;
    2. 构造函数调用创建一个新的空对象,   这个对象继承自构造函数的prototype属性.   构造函数初始化这个心创建的对象并将它作为this.
    3. new o.m();  其中m的this不是o
    4. 构造函数通常不使用return,  如果构造函数使用return显式返回一个对象,   调用表达式结果就是这个对象.   如果return没有指定返回值或者返回一个原始值,  将忽略此返回值并使用初始化后的对象作为调用结果.
  4. 间接调用: apply() call() 通过参数设置this

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2013-11-02 12:09  我的百科全书  阅读(213)  评论(0编辑  收藏  举报