gpt4 book ai didi

javascript - JavaScript 中的公共(public)和特权方法 : Why are they called that way?

转载 作者:行者123 更新时间:2023-12-03 01:01:24 25 4
gpt4 key购买 nike

如果我理解正确的话,根据 Douglas Crockford http://javascript.crockford.com/private.html ,“特权”方法类似于我们所知的“公共(public)”方法。和“公共(public)”方法有点不同。

我的理解是这样的:

  1. “特权”方法可以访问私有(private)变量,因为它是在定义其余私有(private)变量时在闭包内定义的。

    var C = function(){
    var private;
    this.privilegedMethod = function(){
    /* blah blah */
    };
    }
    var cObj = new C();
  2. “公共(public)”方法是通过原型(prototype)添加到对象本身之外的对象的方法。

    var C = function(){
    /* blah blah */
    }
    C.prototype.publicMethod = function(){
    /* blah blah */
    };
    var cObj = new C();

我发现“特权”和“公共(public)”的这些定义非常令人困惑。我认为“特权”方法实际上只不过是我们从面向对象编程中知道的公共(public)方法。我认为“公共(public)”方法应该被命名为其他名称。如果你仔细想想,它是一种奇怪的函数类型,它是对象的成员,但它无法访问任何其他私有(private)变量,这意味着它对封装没有贡献。它几乎就像对象的独立辅助方法。

所以我想知道,为什么道格拉斯·克罗克福德想出这些令人困惑的术语?为什么 javascript 社区采用这些术语?或者如果我有什么错误的地方,请纠正我。

最佳答案

由于 JavaScript 中没有像 public/private/protected 这样的范围修饰符,为了接近 OOP 世界,Douglas Crockford 使用这样的名称,而不是为了混淆来自 Java 的任何人

特权方法可以看到在函数内部定义的变量(这里有一个重要的注意事项 - 在 JavaScript 中,唯一的作用域是函数作用域。没有 block 作用域),因此它们是“特权”的。是的,可以从对象实例调用它们,但这里重要的是,它们可以看到用 var 声明的所有内容(真正的私有(private)内容)

另一方面,附加到对象原型(prototype)的公共(public)方法有一个更重要的事情 - 它们被评估一次并在给定对象的所有实例中可见。

如果您在原型(prototype)方法中使用 this 关键字,它将指向对象的当前实例,但您将只能看到 this< 中定义的内容.

我不知道它是否清楚,但这里最主要的是JavaScript是基于原型(prototype)的语言,并且在该语言中引入原型(prototype)链是为了使继承成为可能。

关于javascript - JavaScript 中的公共(public)和特权方法 : Why are they called that way?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12439465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com