理解JavaScript的public、private和privileged模式
"JavaScript的public、private和privileged模式主要涉及如何在类中管理变量和方法的访问权限。私有变量只能在对象内部通过'var'关键字声明,且只能被私有函数和特权方法访问。私有函数在构造函数内定义,可以被特权函数和私有函数调用。特权方法通过'this'关键字声明,可被外部代码调用,并能访问私有函数。公共属性使用'this'定义,外部可读写,但不能被私有函数调用。公共方法定义在类的原型上,可通过对象外部调用。原型属性通过'ClassName.prototype'定义,静态属性通过'ClassName.'定义。" 在JavaScript中,面向对象编程经常涉及到访问控制,以保护数据的安全性和实现特定的设计模式。以下是更详细的解释: 1. **私有变量**:私有变量仅限于类的内部使用,它们是不可从对象外部直接访问的。在JavaScript中,由于没有内置的私有变量机制,通常通过在构造函数内部使用`var`关键字声明变量来模拟私有性,如`var secret=3;`。 2. **私有函数**:这些函数同样在构造函数内部定义,比如`function dec(){...}`,只能被其他私有函数和特权方法调用。它们无法被外部代码直接访问,用于执行类内部需要隐藏的操作。 3. **特权方法**:特权方法可以被外部代码调用,同时也能访问私有变量和私有函数。它们通过`this`关键字声明,如`this.setSecret = function(num){...}`。这样,虽然外部可以调用`setSecret`,但它仍然能够访问和修改私有变量。 4. **公共属性**:使用`this`关键字定义的属性,如`this.member=param;`,在对象外部可读写。它们是类对外暴露的数据接口,但无法调用私有函数。 5. **公共方法**:公共方法定义在类的原型上,通过`ClassName.prototype`,如`ClassName.prototype.service = function(){...}`。这些方法可以从对象实例外部调用,用于实现类的公共行为。 6. **原型属性**:通过`ClassName.prototype.propertyName=someValue`定义,是所有类实例共享的属性,可以用来添加静态或实例方法之外的属性。 7. **静态属性**:使用`ClassName.propertyName=someValue`定义,属于类本身而非类的实例,常用于存储类级别的信息,而不是与特定实例相关的数据。 8. **函数名赋值给变量**:如`var dec = function dec() {...}`,这样定义的函数具有特权函数和私有函数的特性,因为函数名`dec`在作用域内可以被其他函数调用,而`function dec()`则只在当前作用域内可见。 示例中的代码创建了一个名为`Container`的类,其中包含私有变量`secret`、特权方法`setSecret`、公共属性`member`以及一个未完全定义的公共方法`service`。这个例子展示了如何在JavaScript中实现类的私有成员和公共接口,以确保数据的安全性和封装性。
下载后可阅读完整内容,剩余4页未读,立即下载
- 粉丝: 8
- 资源: 902
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- OptiX传输试题与SDH基础知识
- C++Builder函数详解与应用
- Linux shell (bash) 文件与字符串比较运算符详解
- Adam Gawne-Cain解读英文版WKT格式与常见投影标准
- dos命令详解:基础操作与网络测试必备
- Windows 蓝屏代码解析与处理指南
- PSoC CY8C24533在电动自行车控制器设计中的应用
- PHP整合FCKeditor网页编辑器教程
- Java Swing计算器源码示例:初学者入门教程
- Eclipse平台上的可视化开发:使用VEP与SWT
- 软件工程CASE工具实践指南
- AIX LVM详解:网络存储架构与管理
- 递归算法解析:文件系统、XML与树图
- 使用Struts2与MySQL构建Web登录验证教程
- PHP5 CLI模式:用PHP编写Shell脚本教程
- MyBatis与Spring完美整合:1.0.0-RC3详解