JavaScript:公共,私有,受保护

时间:2013-11-08 20:58:08

标签: javascript oop scope reserved-words

我一直认为“公共”,“私有”和“受保护”关键字用于PHP或Java,而不是JavaScript,但只是发现这些是保留字。

任何人都可以给我一个如何或何时使用这些特定保留字的例子,因为我从未在JavaScript中看到或使用它们,但想知道何时使用它们。

谢谢

5 个答案:

答案 0 :(得分:9)

答案 1 :(得分:3)

来自this source

"以下内容由ECMAScript保留为未来的关键字..."

换句话说,他们目前没有任何功能。

答案 2 :(得分:2)

ECMAScript 5标准在7.6.1.2中仅提及“公共”,“私人”和“受保护”这两个术语(不包括附件和版权声明):

  

以下令牌在严格模式代码中出现时也被视为 FutureReservedWords (见10.1.1)。

implements let private public yield

interface package protected static

也就是说,它们目前不具备该语言的功能,但这些标识符在严格模式下是不允许的,以供将来使用。

请注意,ES5仅在严格模式下禁止使用这些字词,但ECMSAcript 3 forbids them at all

  

7.5.3未来保留字

     

以下词语在建议的扩展名中用作关键词,因此保留以供将来采用这些扩展名的可能性...

答案 3 :(得分:0)

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--;
        }
    }
});

答案 4 :(得分:0)

如果您愿意,可以使用ZNOW。 http://icarusso.github.io/ZNOW/private.html

私人,受保护和公共是保留字。虽然ECMASCRIPT 6是下一个JavaScript版本的支持类。似乎并非所有封装级别都受支持。此外,它的使用似乎有点冗长,并且在任何主流浏览器中都无法使用。 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

这个框架允许您将您的oo技能从Java转移到JavaScript而不会感到痛苦。

另一个例子是Singleton。

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还支持接口,摘要和const。 您在此处链接:http://icarusso.github.io/ZNOW/

希望你喜欢它。