javascript:我可以使用原型定义“私有”变量吗?

问题描述 投票:0回答:1

我想为每个“实例”使用唯一的私有变量(我希望这在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仅可用于构造函数中定义的方法和
  • 功能并非在每个实例中都重复

我想为每个“实例”使用唯一的私有变量(我希望这是Javascript中的正确术语),但是两个实例似乎都使用相同的私有变量。 func = function(myName){...

javascript closures prototype
1个回答
0
投票

问题在于,每次调用构造函数时,您都要替换原型函数。

具有基于闭包的旧式隐私,您不能从原型方法访问“私有”成员,因为只有在构造函数中定义的函数可以对其进行封闭。因此,您最终需要为每个实例重新构建功能(虽然听起来并不差,但效果并不理想)。

© www.soinside.com 2019 - 2024. All rights reserved.