为啥在 JavaScript 对象中使用公共方法? [复制]

Posted

技术标签:

【中文标题】为啥在 JavaScript 对象中使用公共方法? [复制]【英文标题】:Why use public methods in JavaScript objects? [duplicate]为什么在 JavaScript 对象中使用公共方法? [复制] 【发布时间】:2016-01-06 01:28:28 【问题描述】:

我是工作中的一个小型研究小组的一员,该小组试图更好地掌握 javascript 的成功之处。在我们最近关于对象的讨论中,我们了解到每次实例化对象时都会重新创建对象的公共方法,而分配给对象原型的方法只创建一次并由所有实例继承。据我了解,公共方法和分配给原型的方法都是可公开访问的。

那么,我的问题是,如果添加到原型显然更有效,为什么还要创建公共方法呢?公共方法提供了原型没有的什么好处?

【问题讨论】:

向对象添加原型会为要添加的同一类的其他对象(在本例中为函数)创建相同的方法。例如,如果我有 var name = new Student() 并且我添加了一个原型来命名它,var name2 = new Student() 也可以访问它 @AkshayKhandelwal 假设 OP 意味着在 Student 的构造函数中执行 this.GetName = function() ... ,您也可以从两者中访问它,但它是“每次都重新创建”。 另一个类似的问题:Advantages of using prototype, vs defining methods straight in the constructor? @Pablo 不。我不同意。这不是重复的。这绝对是有道理的,因为他指出的区别是再次创建公共方法。 @AkshayKhandelwal 他指出,每次实例化新对象时都会重新创建公共方法。问题的最后两行是这里的关键 【参考方案1】:

具体回答:

公共方法提供了原型没有的什么好处?

在构造函数中添加的方法可以访问私有信息,例如:

function Student() 
    var name = 'Bob';
    this.GetName = function() 
        return name;
    


Student.prototype.SomeOtherPublicMethod = function() 
    //no access to name

【讨论】:

这是有道理的,@James Thorpe。 除非您将“类”包装到一个自执行函数中并将私有方法和字段移出构造函数。 @Kroltan 我很想看看你是如何构造这样一个东西的,原型方法可以访问私有变量,但是对象的每个实例都有它自己的数据。 (真的,没有讽刺......!) @AurumPotabile 如果您想将它们称为特权,那么不 - 这与构造函数中定义的公共方法没有区别。使他们“享有特权”的原因是他们可以访问内部,而不是他们可以 @AurumPotabile 不,这只是一个通常用来指代它们的名称。您太想将这些关键字强加到没有它们的语言上。给您提供关键字“private”和“public”(和“privileged”)是因为您可能熟悉它们,但它们在 JS 中不存在。它们可以让您开始,但为了更深入地理解,请考虑 JS 的核心原则,例如函数作用域、闭包/iifes 等,这才是事情是这样的真正原因。与其他语言的关键字相比,这是一个更健康的知识基础。

以上是关于为啥在 JavaScript 对象中使用公共方法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥在内部类中使用公共方法?

为啥我不能在另一个类中调用公共方法?

C#:为啥我必须在类的变量中使用公共访问修饰符?

为啥在 Javascript 中使用类似数组的对象?

为啥我们应该将接口方法声明为公共的? [复制]

JavaScript:为啥我们在函数中使用 **arguments** 对象? [复制]