【发布时间】:2020-06-12 15:06:48
【问题描述】:
我想为每个“实例”使用一个唯一的私有变量(我希望这是 Javascript 中的正确术语),但两个实例似乎都使用相同的私有变量。
func = function(myName)
{
this.name = myName
secret = myName
func.prototype.tellSecret = function()
{ return "the secret of "+this.name+" is "+secret
}
}
f1 = new func("f_One")
f3 = new func("f_3")
console.log(f3.tellSecret()) // "the secret of f_3 is f_3" OK
console.log(f1.tellSecret()) // "the secret of f_One is f_3" (not OK for me)
我看到了solution 但是
这意味着在每个实例上复制该函数,并且 函数存在于实例上,而不是原型上。
另一位作者说the same solution
这仍然不是很传统的经典 Javascript,它只会在 Account.prototype 上定义一次方法。
那么,有没有办法解决
- 每个实例都可以有
secret的唯一值 -
secret仅可用于构造函数中定义的方法 和 - 函数不会为每个实例重复
?
【问题讨论】:
-
secret = myName->let secret = myName或const secret = myName。您目前正在分配给一个全局变量。 -
@VLAZ 只是添加这行不通,因为原型方法在每次调用
new func时都会被覆盖 -
@adiga 是的,我后来意识到了这一点。我撤回了我的近距离投票。我最初误读了这个问题。
-
您需要将
func.prototype.tellSecret方法移到外部,并设法将secret值移到外部(就像在您链接的问题中一样) -
@VLAZ tbh 我也为此困惑了整整两分钟
标签: javascript closures prototype