本文详细解析 JavaScript 中对象成员的可见性机制,涵盖私有属性、私有方法、公共属性、公共方法以及静态属性和方法的定义方式。通过 var 关键字、this 关键字及原型链三种途径,阐述不同访问权限的实现原理与代码示例,帮助开发者掌握封装与接口设计。
JavaScript 对象可见性概述
在 JavaScript 中,对象成员的可见性(或访问权限)主要可分为以下几类:
1,私有属性(private properties)
私有属性与私有方法
利用 var 关键字在构造函数内部定义的变量具有私有作用域,仅能在该构造函数的内部被访问。例如:
具体代码实现如下:
function VariableTest()
{
var myVariable;//private
}
var vt = new VariableTest();
vt.myVariable;//这里会出现undefined异常 2,私有方法(private methods)
与私有属性类似,私有方法也仅在构造函数作用域内可见。示例如下:
代码如下:
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)
公共属性与公共方法定义
function PrivilegedVariable()
(1)使用 this 关键字进行定义。示例如下:
代码如下:
function PrivilegedVariable()
{
this.variable = "privileged variable";
}
var pv = new PrivilegedVariable();
pv.variable;//返回 "privileged variable" (2)通过构造函数的 prototype 属性进行定义。示例如下:
代码如下:
function PublicVariable(){}
PublicVariable.prototype.variable = "public variable";
var pv = new PublicVariable();
pv.variable;//返回"public variable" 4,公共方法(public methods)
同理,定义公共方法也有两种主要方式。
(1)通过 this 关键字定义。(2)通过构造函数的 prototype 定义。
此处省略具体代码示例。
5,静态属性(static properties)
静态属性与静态方法
直接挂载在构造函数上的属性(静态属性)无法通过实例访问,仅构造函数自身可使用。例如:
代码如下:
function StaticVariable(){}
StaticVariable.variable = "static variable";
var sv = new StaticVariable();
sv.variable;//返回"undefined"
StaticVariable.prototype.variable;//返回"undefined"
StaticVariable.variable;//返回"static variable" 6,静态方法(static methods)
直接挂载在构造函数上的方法(静态方法)同样无法通过实例访问,仅构造函数自身可用。
代码示例省略。