8

我一直认为“Public”、“Private”和“Protected”关键字用于 PHP 或 Java,而不是 JavaScript,但我发现这些是保留字。

谁能给我一个如何或何时使用这些特定保留字的示例,因为我从未在 JavaScript 中看到或使用过它们,但想知道何时使用它们。

谢谢

4

5 回答 5

11

这些是为将来可能的使用而保留的。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Reserved_Words

于 2013-11-08T20:59:18.617 回答
3

这个来源

“以下内容被 ECMAScript 保留为未来的关键字......”

换句话说,它们目前没有功能。

于 2013-11-08T20:59:24.297 回答
2

ECMAScript 5 标准在7.6.1.2中每一个(不包括附件和版权声明)都只提到了“公共”、“私有”和“受保护”这些术语:

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

implements let private public yield

interface package protected static

也就是说,它们当前不是该语言的特性,但这些标识符在严格模式下是不允许的,以便为它们未来的使用让路。

请注意,ES5 仅在严格模式下禁止这些词,但ECMSAcript 3 完全禁止它们

7.5.3 未来保留字

以下词在提议的扩展中用作关键字,因此保留以允许将来采用这些扩展...

于 2013-11-08T21:04:08.747 回答
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--;
        }
    }
});
于 2013-12-11T06:48:05.097 回答
0

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

private、protected 和 public 是保留字。尽管 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。

另一个例子是单例。

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/

希望你喜欢它。

于 2014-12-28T05:48:43.383 回答