2010-07-23 52 views
2

假设我有JavaScript代码像该运营商在JavaScript

 myClass = function(){ 
      function doSomething(){ 
       alert(this); // this1 
      } 
     } 
     alert(this); //this2 

什么这两个“这个”对象是指为?

回答

15

在全球执行上下文的this值,指的是全局对象,如:

this === window; // true 

功能码,它实际上取决于你如何调用该函数,例如this

没有基础对象调用函数参考

当隐式设置

this值也会引用全局对象。

调用绑定作为对象的性质的函数:

obj.method(); 

this值将指obj

使用new操作者

new MyFunc(); 

this值将涉及一个新创建的对象,从MyFunc.prototype继承。

另外,还可以显式地设置该值时,调用一个函数,即使用callapply方法,例如:

function test(arg) { 
    alert(this + arg); 
} 
test.call("Hello", " world!"); // will alert "Hello World!" 

callapply之间的区别在于与apply,可以传递正确地任何数量的参数,使用阵列或arguments对象,例如:

function sum() { 
    var result = 0; 
    for (var i = 0; i < arguments.length; i++) { 
    result += arguments[i]; 
    } 
    return result; 
} 

var args = [1,2,3,4]; 
sum.apply(null, args); // 10 

// equivalent to call 
sum(1,2,3,4); // 10 

如果01的第一个参数值或applynullundefined,this值将引用全局对象。

(注意,这将在未来可能改变,与ECMAScript的5,其中callapply传递thisArg值不加修改)