2014-01-10 42 views
2

如下所示,method()將輸出hello,undefinedmethod()的範圍是什麼?謝謝。Javascript方法和函數

var obj = { 
    name:'Tom', 
    sayHello:function() { 
     console.log("hello," + this.name); 
    } 
} 

obj.sayHello(); 

var method = obj.sayHello; 
method(); 

輸出

hello,Tom 
hello,undefined 

回答

3

method由於是window對象的一部分,thiswindow

考慮這個例子

var name = 'foo'; 
method(); 

日誌...

> hello,foo 
1

var method的範圍全球。它等於只是定義一個函數

var method = function() { 
    console.log("hello," + this.name); 
} 
2

obj.sayHello()的範圍內objmethod是全局屬性,因此將其分配給sayHello函數使sayHello函數在全局範圍內查找this.name

要理解這一點,直接在腳本指定名稱的全局屬性

var obj = { 
    name:'Tom', 
    sayHello:function() { 
     console.log("hello," + this.name); 
    } 
} 

obj.sayHello(); 

//Assign name to the global scope 
this.name = "Jerry"; 
var method = obj.sayHello; 

method.call(this); //Calling from the global scope, same as method() 

//Then call method from the obj scope 
method.call(obj);