我一直认为"Public", "Private"和"Protected"关键词是用于PHP或Java的,而不是JavaScript,但最近才发现这些都是JavaScript保留字。
有人能给我举个例子,说明何时应该使用这些特定的保留字吗?因为我在JavaScript中从未见过或使用过它们,但我想知道何时应该使用。
谢谢。
我一直认为"Public", "Private"和"Protected"关键词是用于PHP或Java的,而不是JavaScript,但最近才发现这些都是JavaScript保留字。
有人能给我举个例子,说明何时应该使用这些特定的保留字吗?因为我在JavaScript中从未见过或使用过它们,但我想知道何时应该使用。
谢谢。
也就是说,它们目前不是语言的特性,但在严格模式下禁止使用这些标识符以为未来的使用留出空间。The following tokens are also considered to be FutureReservedWords when they occur within strict mode code (see 10.1.1).
implements let private public yield interface package protected static
7.5.3 未来保留字
以下单词用作提议扩展中的关键字,因此被保留以允许将来采用这些扩展...
如果您喜欢,可以使用ZNOW。 http://icarusso.github.io/ZNOW/private.html
private、protected和public是保留字。尽管ECMASCRIPT 6,即下一个JavaScript版本,支持class,但似乎并不支持所有的封装级别。此外,它的使用似乎有点冗长,并且在任何主要浏览器中都不可用。 http://wiki.ecmascript.org/doku.php?id=harmony:classes
我想不同的封装级别可以增加代码的可读性和可维护性。特别是在开发复杂程序和与其他程序员合作时。所以我设计了这个框架。:-)
它使用名称前缀来声明不同的封装级别:_表示私有,$表示受保护。 例如:
var ClassA=Class({
init:function(a){ //constructor
this._a=a;
},
foo:function(){ //public function
return this._a;
},
_a:false //private attribute
})
var a=new ClassA('a');
console.log(a._a == 'a'); //false
console.log(a.foo() == 'a'); //true
这个框架让你可以在不痛苦的情况下,从Java转移到JavaScript的面向对象编程技巧。
另一个例子是单例模式。
var ClassA=Class({
'static.getInstance':function(){
if(!ClassA._instance) ClassA._instance=new ClassA();
return ClassA._instance;
},
'static._instance':false,
_init:function(){ //private constructor
console.log('instance created');
}
})
var a1=ClassA.getInstance(); //>instance created
var a2=ClassA.getInstance();
console.log(a1==a2); //>true
希望您会发现这个框架易于使用和阅读。 ZNOW还支持接口、抽象和常量。 这是链接:http://icarusso.github.io/ZNOW/
希望您喜欢它。
https://github.com/nooning/JSClass/ 支持私有、受保护的、公共的、友好的、静态的虚拟
Class(
{
Namespace:ABC,
Name:"ClassL3",
Bases:{"ClassL2":{Namespace:ABC,Policy:Class.Policy.Public}},
Private:{
Leg:2
},
Protected:{
TestProtected:0,
fight:function(){
console.log("ClassL3::fight "+this.constructor["."].Name);
this.Leg--;
}
}
});
let
在较新的 Mozilla 实现中使用。 - Teemu