为什么Javascript具有特权功能

Don*_*eba 9 javascript

在工作中讨论之后,我仍然没有对以下内容有满意的答案,在其他编程语言中我们都没有谈到特权函数.

var kid = function(name)
{
    // Private
    var idol = "Paris Hilton";

    // Privileged
    this.get_idol = function()
    {
        return idol;
    };
}
Run Code Online (Sandbox Code Playgroud)

我能想到的唯一逻辑是,如果你让一个公共函数返回一个私有变量,那么这个函数是"特权"来执行此操作(因为你不能直接调用它).

我们可以在php中做同样的事情,但我们不使用这个花哨的名字,也不能使用这个术语回忆任何其他语言.

你甚至可能会发现,如果你需要一个"特权"功能,你的整个方法都是错误的,因为如果你需要它可以从外部访问,为什么不直接公开它.

另一方面,私有变量不能从外部改变,因此它将受到保护.但显示在外面.

最后,作为普通javascript的一个新手,这个词有点令人困惑,imho只是一个奇特的名字,使它更混乱,因为然后在PHP它也会变得像javascript:

class kid
{
    // Private
    private idol = "Paris Hilton";

    // PUBLIC OR PRIVILEGED ? 
    public function get_idol()
    {
        echo $this->idol;
    }
}
Run Code Online (Sandbox Code Playgroud)

它做的相同,但只是一个公共方法.

Jul*_*lia 12

Javascript没有特权或任何功能.所有它的功能都是闭包,那就是那里使用的东西,C#也得到了这个和大多数功能语言.

如果需要,可以使用该语言的ECMA规范,特权字不会出现在其中.

这个术语似乎来自http://www.crockford.com/javascript/private.html,但它只是将闭包概念简化为针对其使用目标的特定情况,我猜对于OOP程序员类型.

Javascript可以比大多数OOP语言更强大的设计,但你需要以开放的心态和理解功能概念来处理它.试图强迫它成为另一种OOP语言既是一个坏主意,也是一个耻辱.


Jas*_*n S 7

我从未听说过特权功能; 正确的术语是闭包:在作用域中定义一个函数,该函数可以访问在其外部作用域中定义的变量.闭包可以在很多语言中使用(Javascript,Python,Lisp/Scheme都可以,而Java部分通过可以在闭包范围内访问最终变量的内部类).

对象的成员变量(例如,Java/Javascript中的this.foo或PHP中的this-> foo)是不同的.


Hen*_*ann 5

是的,该模式用于模拟私有属性和访问它们的公共方法.

JavaScript实际上没有对象的公共/私有属性/函数.私有属性是构造函数中的局部变量,可以由子函数访问(javascript术语中的"闭包").然后将对子函数的引用添加为对象的属性.

我不认为通常使用"特权功能"这个术语.我只在"面向OOP人的JavaScript"教程中看到过它.