我有一個JavaScript類:`this`指的是什麼?
function Person(n){
// ...
}
類之外,我有以下代碼:
Person.prototype.shower = function(){ this.dirtFactor=2 }
是什麼this
在上面的代碼是指什麼?它是指prototype
,或到Person
類?
我有一個JavaScript類:`this`指的是什麼?
function Person(n){
// ...
}
類之外,我有以下代碼:
Person.prototype.shower = function(){ this.dirtFactor=2 }
是什麼this
在上面的代碼是指什麼?它是指prototype
,或到Person
類?
好,基礎知識第一:當你寫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
被調用的對象。在上述情況下,它將是。
它是指人
這樣的情況下,當你做一個
var Mike = new Person();
那麼這是邁克
例
<input type="text" id="field" value="Bla" />
<script>
document.getElementById('field').onfocus=function() {
alert(this.value)
}
</script>
將提醒的價值字段中的功能被分配給
它reffers到Person類
var instance = new Person(...); instance.shower(); // Here will be this.dirtFactor assigned to instance.dirtFactor
的實例this
含義取決於你如何通話的功能,而不是你如何定義它。
假設你做這樣的事情:
var bob = new Person('whatever n is');
bob.shower();
然後this
將bob
(這將是Person
一個實例)。
這指的是調用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
仍然是指您在其調用該方法的對象。
+1,但要清楚的是,'this'指的是被調用之前的任何內容。如果沒有'.'調用,那麼'this'默認爲'window' /'global'。 – 2011-03-01 10:41:45
這可以通過用'function(){console.log(this)替換shower函數來證明。 }'。 – kim3er 2011-03-01 10:42:49
@ Box9'this'指的是當前的上下文。 'this'默認情況下會引用'window'對象(在瀏覽器中)。上下文會隨着您添加機箱/功能而發生變化。 – kim3er 2011-03-01 10:44:56