您好我正在學習,現在JS類現在有一個問題,即無法理解:JS類和對象
var o = new F(4)
function F(temp){var a=22; this.temp = temp}
alert(o.temp); // print 4
alert(o.a); // print undefined
從面向對象的觀點:「F」是類/構造,「O」是對象,「temp」是對象的字段,那麼變量「a」是什麼以及如何得到它?
您好我正在學習,現在JS類現在有一個問題,即無法理解:JS類和對象
var o = new F(4)
function F(temp){var a=22; this.temp = temp}
alert(o.temp); // print 4
alert(o.a); // print undefined
從面向對象的觀點:「F」是類/構造,「O」是對象,「temp」是對象的字段,那麼變量「a」是什麼以及如何得到它?
請注意:JavaScript並沒有像其他語言那樣真正具有「類」。它被稱爲原型語言或原型語言。
在答案
,你不能訪問a
,因爲它不是o
成員。如果您想通過說o.a
來訪問它,那麼在構造函數中,您必須寫入this.a = //whatever
。
構造函數就像任何其他函數一樣。使它們成爲構造函數的唯一方式是new
關鍵字使函數查找同名的原型的方式,使該函數成爲其「構造函數」並設置正確的上下文。據說,在函數作用域中聲明的任何局部變量對於該函數而言都是本地的,無論該函數是否在該特定時間點僞裝成構造函數。
o.a
無法訪問,因爲您的a
在F
的構造函數中關閉。
看到這篇文章:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions_and_function_scope
當你在上面用關鍵字var
屬性,這個元素只是他的父母範圍存在。
因此,在您的示例中,a
是F
類的私人成員。
例如:
'use strict';
;(function() { // private function
var a = "toto";
alert (a); // display "toto"
})(); // autocalled
alert (a); // undefined
Howether:
'use strict';
var a = "toto";
;(function() {
alert (a); // display toto
}();
;(function() {
alert (a); // display toto
}();
在這個例子中,a
是全球性的,以當前執行的腳本,可以在代碼中到處調用。
因爲a是在F()中使用的局部變量,其中temp是F的屬性,所以您可以訪問。 –
感謝您的幫助,這是一個很好的例子 – Simcha