javascript 封装 - 有什么方法可以访问给定实例的私有(private)成员?

标签 javascript

是否可以在给定实例变量的情况下访问 javascript 中的私有(private)成员?例如,

function class Foo() {
   var x=12;
   // some other stuff
}
F = new Foo();
// how to get/set F.x?

更新:作为一个转折,假设该类有一个特权方法。是否有可能劫持该特权方法来访问私有(private)成员?

function class Foo() {
   var x=12, y=0;
   this.bar = function(){ y=y+1; }
}
F = new Foo();
// can I modify Foo.bar to access F.x?

最佳答案

您需要一个 privileged method获取/设置x的值:

function Foo() {
    var x = 12;
    this.getX = function() { return x; };
    this.setX = function(v) { x = v; };
}

var f = new Foo(),
    g = new Foo();

f.getX(); // returns 12
g.getX(); // returns 12

f.setX(24);

f.getX(); // returns 12
g.getX(); // returns 24

g.setX(24); 

f.getX(); // returns 24
g.getX(); // returns 24

现场演示: http://jsfiddle.net/simevidas/j7VtF/

关于javascript 封装 - 有什么方法可以访问给定实例的私有(private)成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5683595/

相关文章:

javascript - 设置 highchart 中 y 轴的 double 最小值和最大值

javascript - 创建部分索引并从字符串跳转到页面菜单

javascript - 未捕获的 TypeError * 不是函数

c# - 捆绑的 Javascript,如何检查 bundle 是否已在浏览器上正确加载并检查内容

javascript - 使用 Google Earth API 查找景观结构

javascript - 为什么函数名在分配给 var 时消失了?

javascript - 如何使用 javaScript 进行相移?

javascript - 将特定元素中的所有文本转换为大写?

javascript - jquery不能通过函数传递变量

javascript - 如何使用 SWR 根据登录状态有条件地获取用户数据?