與java等基於類的物件導向語言的private、protected、public等關鍵字的用途類似,基於對象的JavaScript語言,在物件建構上也存在類似的成員可見度問題。
JavaScript物件建構的可見度定義可以分為以下幾種:
1,私人屬性(private properties)
通過var關鍵字定義物件建構中變數的範圍,該變數只能在物件建構方法的範圍內被訪問。如:
function VariableTest()
{
var myVariable;//private
}
var vt = new VariableTest();
vt.myVariable;//這裡會出現undefined異常
2,私人方法(private methods)
與私人屬性類似,只能在物件建構方法範圍內被訪問。如:
Code
function MethodTest()
{
var myMethod = function()//private
{
alert("private method");
}
this.invoke = function()
{
//能夠訪問到myMethod
myMehtod();
}
}
var mt = new MethodTest();
mt.myMethod();//錯誤。使用trycatch的話,可捕獲“對象不支援此屬性或方法”異常
mt.invoke();
3,公用屬性(public properties)
有兩種定義公用屬性的途徑:
(1)通過this關鍵字來定義。如:
function PrivilegedVariable()
{
this.variable = "privileged variable";
}
var pv = new PrivilegedVariable();
pv.variable;//返回 "privileged variable"
(2)通過構造方法的原型來定義。如:
function PublicVariable(){}
PublicVariable.prototype.variable = "public variable";
var pv = new PublicVariable();
pv.variable;//返回"public variable"
4,公用方法(public methods)
同理,有兩種定義公用方法的途徑。
(1)通過this關鍵字來定義。(2)通過構造方法的原型來定義。
這裡省略。。。。。。。。。。。
5,靜態屬性(static properties)
直接為物件建構方法添加的屬性,不能被對象執行個體訪問,只能供構造方法自身使用。如:
Code
function StaticVariable(){}
StaticVariable.variable = "static variable";
var sv = new StaticVariable();
sv.variable;//返回"undefined"
StaticVariable.prototype.variable;//返回"undefined"
StaticVariable.variable;//返回"static variable"
6,靜態方法(static methods)
直接為物件建構方法添加的方法,不能被對象執行個體訪問,只能供構造方法自身使用。
代碼省略。。。。。。。。