从原型定义的函数访问私有成员变量
在 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()
出现此行为是因为构造函数中定义的方法由于可以访问私有变量的定义范围而可以访问它们。但是,原型定义的方法不是在构造函数的作用域内创建的,并且无法访问其局部变量。
解决访问需求
虽然没有直接的方法要授予对原型定义方法的私有变量的访问权限,可以使用其他方法来实现所需的功能:
这是一个示例:
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中文网其他相关文章!