2010-09-21 58 views
1

我已經瞭解到,在函數調用中,this會引用全局對象。在下面的函數中,哪個是全局對象?JavaScript:什麼是全局對象,「this」指的是什麼?

它是函數還是有一個默認的全局對象,其中this將引用?除此之外,這段代碼實際上做了什麼?我對method佔位符特別困惑。它是否必須用Function.prototype中預先存在的方法來替換?

而在行this.prototype[name] = func;,哪些屬性是指,該方法的或Function.prototype的?

Function.prototype.method = function (name, func) { 
    this.prototype[name] = func; 
    return this; 
}; 

回答

2

this關鍵字是指當前對象,並且如果功能的範圍是全局命名空間,當前對象是全局對象,即,如果環境是一個瀏覽器的window對象。

當你要添加到Function類的方法,該this關鍵字將引用您正在呼籲method方法的功能,所以它會返回函數本身,這樣的呼叫可以被鏈接。

這將聲明功能F作爲構造,創建類型F的對象,作爲一個方法添加函數xF並將其命名爲xx,然後使用該對象f調用xx這確實是x

function F() {} 
function x() { alert(1); } 

var f = new (F); 
F.method('xx', x); 
f.xx(); 

所以,這樣的:

F.method('xx', x).method('yy', y); 

是一樣的:

F.prototype.xx = x; 
F.prototype.yy = y; 
+0

所以在Function.prototype.method的「方法」部分實際上是一個保留關鍵字?是對的嗎?作爲一個整體的代碼只是簡單地將一個方法x分配給xx? – Joann 2010-09-21 09:27:29

+0

@Joann:不,'method'不是保留關鍵字,它只是一個方法的名稱。是的,代碼只是爲了向類中添加方法。 – Guffa 2010-09-21 11:20:34