我读到使用 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/