理解JavaScript的public、private和privileged模式

0 下载量 168 浏览量 更新于2024-08-31 收藏 67KB PDF 举报
"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中实现类的私有成员和公共接口,以确保数据的安全性和封装性。