JavaScript特权方法定义、作用及与公有方法的区别

作者:半夏

时间:2026-10-27

浏览:136

本文深入解析JavaScript中特权方法的定义与作用。特权方法在构造函数内通过this定义,既能公开访问又能读取私有成员,常作为对象接口。文章详细对比了特权方法与公有方法在内存占用(实例副本vs共享)及私有属性访问权限上的核心差异,并通过代码示例阐明其实现机制。

文章目录
定义特权方法

特权方法的定义与示例

在构造函数内部利用this关键字定义的方法,能够被该构造函数的实例对象继承并调用。


具体实现代码如下:

 
var Student = function(name) {
var _name = name; //私有属性
//特权方法
this.getName = function() {
return _name;
}; 
this.setName = function(name) {
_name = name;
}; 
}; 
var s1 = new Student('zhangsan');
s1.getName(); //zhangsan

特权方法的作用

特权方法的核心作用

特权方法不仅可以在构造函数外部通过实例对象公开访问,还能直接读取和修改私有成员及方法,因此非常适合作为对象或构造函数的接口。通过特权方法,我们可以精确控制公有方法对私有属性或方法的访问权限,这一机制在JavaScript框架的扩展中有着广泛的应用。


特权方法与公有方法的区别

特权方法与公有方法的对比

两者的相同点在于:第一,它们都可以在构造函数外部被公开访问;第二,两者均具备访问公有属性的能力。


两者的不同点主要体现在以下两个方面:


第一,内存占用差异。每个实例对象都会拥有一份特权方法的独立副本(单例模式除外,此时需考虑内存开销),而公有方法则由所有实例对象共享。


验证代码如下:

 
//创建Student对象实例
var s1 = new Student('zhangsan');
var s2 = new Student('lisi');
//两实例的特权方法的引用不相同, 说明在对象实例化的时特权方法被重新创建
console.log(s1.getName === s2.getName); //false

第二,访问权限差异。特权方法可以访问私有属性和方法,而公有方法无法直接访问私有属性。


相关代码如下:

 
//为Student创建公有方法
//公有方法不能访问私有属性
Student.prototype.myMethod = function() {
console.log(_name); //ReferenceError: _name is not defined
}; 
s1.myMethod();

小结

总结

特权方法作为构造函数的接口,使得公有方法可以通过调用特权方法来间接访问私有属性和方法。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章