gpt4 book ai didi

javascript - 我应该向原型(prototype)添加*内部*属性吗?

转载 作者:行者123 更新时间:2023-11-28 21:13:23 25 4
gpt4 key购买 nike

我知道使用原型(prototype)的结果是所有添加的属性和方法都将是公共(public)的。这实际上并不是什么大问题,因为我使用命名约定来区分内部接口(interface)和公共(public)接口(interface)。所以,是的,一切技术上仍然是公开的。

最好只将所有方法和属性添加到原型(prototype)中 - 即使是内部的方法和属性 - 而不是仅添加公共(public)方法/属性添加到原型(prototype)并使用 this.property = value.?

在构造函数内动态创建内部属性

看来既然一切都会公开,我们不妨也向原型(prototype)添加内部属性。

我知道如何使用闭包创建私有(private)范围。我的问题不是如何创建真正的私有(private)属性(这意味着放弃原型(prototype),因为这些方法中的任何一个都没有内部访问权限),而是关于使用原型(prototype)时的最佳实践。

function MyObjectA() {
this.myInternalProp_ = 5;
// ...
}

MyObjectA.prototype.myPublicProp = "Hello";

对比

function MyObjectA() {
// ...
}

MyObjectA.prototype.myPublicProp = "Hello";
MyObjectA.prototype.myInternalProp_ = 5;

最佳答案

将属性放在原型(prototype)上意味着这些属性不仅是公共(public)的,而且是共享的。当您的属性是可变类型(例如 Date)时,这会成为问题:

function MyObjectA () { }  
MyObjectA.prototype.date = new Date(2011, 10, 18);
var obj1 = new MyObjectA();
var obj2 = new MyObjectA();
obj1.date.setDate(24);
console.log(obj2.date); // Thanksgiving, not today

另请参阅Using "prototype" for variables

关于javascript - 我应该向原型(prototype)添加*内部*属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8188549/

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