首页  >  文章  >  web前端  >  如何从 JavaScript 中的原型定义函数访问私有成员变量?

如何从 JavaScript 中的原型定义函数访问私有成员变量?

Patricia Arquette
Patricia Arquette原创
2024-10-27 03:11:30572浏览

How can I access private member variables from prototype-defined functions in JavaScript?

从原型定义的函数访问私有成员变量

在 JavaScript 中,在构造函数中声明的私有变量不能直接被方法访问在原型中定义。可以在以下代码片段中观察到这种情况:

TestClass = function(){
  var privateField = "hello";
  this.nonProtoHello = function(){alert(privateField)};
};
TestClass.prototype.prototypeHello = function(){alert(privateField)};

// This executes successfully:
t.nonProtoHello()

// This fails:
t.prototypeHello()

出现此行为是因为构造函数中定义的方法由于可以访问私有变量的定义范围而可以访问它们。但是,原型定义的方法不是在构造函数的作用域内创建的,并且无法访问其局部变量。

解决访问需求

虽然没有直接的方法要授予对原型定义方法的私有变量的访问权限,可以使用其他方法来实现所需的功能:

  • Getters 和 Setters: 在 this 对象上创建 getters 和 setters 以提供对私有变量的受控访问。原型定义的方法以及有权访问该对象的其他代码可以利用这些 getter 和 setter。

这是一个示例:

function Person(name, secret) {
  // public
  this.name = name;

  // private
  var secret = secret;

  // public methods with controlled access
  this.setSecret = function(s) {
    secret = s;
  }

  this.getSecret = function() {
    return secret;
  }
}

// Prototype-defined method using getters
Person.prototype.spillSecret = function() { alert(this.getSecret()); };
  • 间接访问:虽然原型定义的方法不能直接访问私有变量,但它们可以与具有访问权限的包装函数交互。这允许间接访问,而无需将私有变量直接暴露给原型。

总之,虽然从原型定义的方法访问私有变量本质上受到限制,但使用 getter 和 setter 或间接访问提供了灵活的解决方案实现对这些变量的受控访问。

以上是如何从 JavaScript 中的原型定义函数访问私有成员变量?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn