为啥在 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 对象中使用公共方法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章