在Introduction to Object-Oriented JavaScript中,給出了關於如何以面向對象的方式使用javascript的形式化描述。您的函數中的對象代碼將線沿線的喜歡:如何正確使用Javascript進行OOP並明確指定變量作用域?
$(function() {
var oPerson = new cPerson("Florian");
alert("Hi! My name is " + oPerson.sMyNameIs());
});
function cPerson(sSetName)
{
var sName= sSetName;
var oPersonInst = this;
this.sMyNameIs = function() {
return sName;
};
}
有了更多的經驗,你可能需要一個更皆伐參考實例化的類,所以你修改類代碼本身(我加過另一功能):
function cPerson(sSetName)
{
var sName= sSetName;
var oPersonInst = this;
this.sMyNameIs = function() {
return oPersonInst.sName;
};
this.sMyFullNameIs = function() {
return oPersonInst.sMyNameIs();
};
}
現在我們已經來到翻過三種不同的方式類函數中提到的功能或變量:
return sName;
return this.sName;
return oPersonInst.sName;
蘇ppose我想在實例化的類中非常明確地調用sName變量,隨着開發的進行,這些示例函數將越來越複雜和深入。
我認爲第一個選項('return sName;')
是不確定的,因爲您不太確定您是否引用了正確的目標實例化類作用域中的變量。這可能是您打電話時的一個意外的本地變量。
第二,使用this
,恕我直言,也不是完美的,因爲this
根據情況顯然改變,你不能(?)依賴於你特別要求在實例化類權的變量。
所以第三個參考,恕我直言,最好看的參考。非常明確地定義在類的實例化。怎麼可能有任何疑問,類的var sName的意思。
Q1:爲什麼用this.
定義的類中的函數?難道不能用oPersonInst.something = function() { //... };
來定義嗎?
Q2:爲什麼在代碼完成,我已經給,alert(oPersonInst.sMyNameIs());
工作,但alert(oPersonInst.sName);
沒有(至少不內$.each(something, function() { //right here })
),但alert(sName);
DOES(因爲上述原因不被看好恕我直言)工作?
Q3:可有人煲一些示例代碼,甚至可能更改此示例代碼,其中固體外的局部範圍內引用時,會在外面工作,以及內部$.each(...)
回調函數(或其他回調相關功能)?
請原諒我的困惑,我們都是學習者,我感到腦海中有一個洞。這篇文章沒有很好地解釋我對此的擔憂。