錯誤:name 和 age都沒有定義。
正确。
錯誤:name 和 age 未定義。
通過 var self = this,正确。
錯誤:sayHello未定義。
每個函數都有屬于自己的this對象,這個this對象是在運作時基于函數的執行環境綁定的,即在全局對象中,this指向的是window對象;在自定義函數中,this對象指向的是調用這個函數的對象,也就是說,this指向的是調用執行環境的那個對象。如果是在函數嵌套環境中,this指代的是調用外部函數或者内部函數的執行環境的對象。
那麼這裡可能又會出現新的疑問:為什麼self.name 和 self.age是正确的呢?
其實這又涉及到另一個話題:執行個體成員與局部成員。我們建立構造函數的意義就是要用它來建立執行個體,那麼所有屬于執行個體的成員都需要用this來定義;而隻有那些不屬于執行個體的成員才不會用this定義;當然,用this定義了方法以後,在函數作用域内部要調用此方法時,就需要加上this了。
錯誤:name 和 age未定義。