gpt4 book ai didi

JavaScript Object.prototype 访问私有(private)值

转载 作者:行者123 更新时间:2023-11-30 18:30:21 24 4
gpt4 key购买 nike

我读到使用 Object.prototype 将函数附加到自定义 JavaScript 对象比 this.foo = function() 的“传统”方法更有效.我遇到的问题是范围。我希望这些公共(public)方法能够访问对象的私有(private)变量。我最终做的是这样的:

function Foo(){
var id = 5;
Foo.prototype.bar = function(){
alert(id);
};
}
var x = new Foo();
x.bar();

我将原型(prototype)声明嵌套在对象定义中。这有效并且似乎可以解决问题。有什么理由不这样做吗?有没有更好或更标准的方法来实现这一点?

更新根据我收到的一些回复,我想我需要说明一点,我完全清楚 JavaScript 中没有 private 变量的概念。我在这里使用术语 private 表示在当前范围之外不可访问,因为它更容易说和写,我假设任何试图回答这个问题的人都会知道我使用术语 的意思私有(private)

最佳答案

虽然您的想法可行,但它可能不会如您所愿。我相信每次实例化新的 Foo 时,您都会覆盖原型(prototype)。每次您创建一个新的 Foo 时,它可能会更改所有 Foo 实例的 bar() 方法。糟糕。

这是一个使用虚假私有(private)变量让某人“谎报”真实年龄的示例。

这是执行此操作的标准方法:

function Person(name, age) {
this._age = age; // this is private by convention only
this.name = name; // this is supposed to be public
}

Person.prototype.sayHiTo = function(person) {
console.log("Hi " + person.name + ", my name is " + this.name);
}

Person.prototype.age = function() {
return this._age - 3;
}

var j = new Person("Jay", 33);
var k = new Person("Kari", 26);
j.sayHiTo(k) // Hi Kari, my name is Jamund
k.age(); // 23

关于JavaScript Object.prototype 访问私有(private)值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9828917/

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