2011-03-01 89 views
6

我有一個JavaScript類:`this`指的是什麼?

function Person(n){ 
    // ... 
} 

類之外,我有以下代碼:

Person.prototype.shower = function(){ this.dirtFactor=2 } 

是什麼this在上面的代碼是指什麼?它是指prototype,或到Person類?

回答

1

好,基礎知識第一:當你寫function Person(o) { ... },你是不是聲明一類 - JavaScript沒有類爲主,但基於對象的。這個語句只是聲明一個函數(順便說一句,也是對象)。

接下來,當你創建一個這樣的對象:

var mellon = new Person('Mellon'); 

你創建了一個對象,它的構造(各種)是Person

現在,請仔細閱讀本:因爲的構造是Person,在Person所有方法的prototype將於對象。

所以,如果你寫:

Person.prototype.shower = function(){ this.dirtFactor=2 } 

那麼方法mellon.shower()將可用。

我建議通過Mozilla's intro to OOP in Javascript瞭解關於此主題的一些詳細信息。


因此,要回答你的問題:this是指與方法shower被調用的對象。在上述情況下,它將是。

1

它是指人

這樣的情況下,當你做一個
var Mike = new Person();

那麼這是邁克

<input type="text" id="field" value="Bla" /> 
<script> 
document.getElementById('field').onfocus=function() { 
    alert(this.value) 
} 
</script> 

將提醒的價值字段中的功能被分配給

1

它reffers到Person類

 
    var instance = new Person(...); 

    instance.shower(); // Here will be this.dirtFactor assigned to instance.dirtFactor 
4

的實例this含義取決於你如何通話的功能,而不是你如何定義它。

假設你做這樣的事情:

var bob = new Person('whatever n is'); 
bob.shower(); 

然後thisbob(這將是Person一個實例)。

+0

+1,但要清楚的是,'this'指的是被調用之前的任何內容。如果沒有'.'調用,那麼'this'默認爲'window' /'global'。 – 2011-03-01 10:41:45

+1

這可以通過用'function(){console.log(this)替換shower函數來證明。 }'。 – kim3er 2011-03-01 10:42:49

+0

@ Box9'this'指的是當前的上下文。 'this'默認情況下會引用'window'對象(在瀏覽器中)。上下文會隨着您添加機箱/功能而發生變化。 – kim3er 2011-03-01 10:44:56

1

這指的是調用shower的對象。具體來說,您將最終結束了做

p = new Person(n); 

這將執行Person功能,並創建一個新的空對象,將訪問作爲構造this。然後該對象將被鏈接到Person.prototype,任何在p上失敗的屬性引用將在Person.prototype上查看是否在那裏找到它。

如果在p上調用,使用p.shower(),則this將返回到p。重點是,雖然沒有JavaScript中的實例和類。 Person.prototype是一個對象,由Person構造的所有對象將共享對它的引用。

刪除原型都在一起,你可以做

person = {'shower': function() { 
    this.dirtFactor = 2; } 
} 

person.shower(); 
console.log(person.dirtFactor); 

,你會看到,this仍然是指您在其調用該方法的對象。

相關問題