JavaScript 函数定义中的访问限制
在 JavaScript 中,变量对函数的可访问性取决于函数定义的范围。在构造函数内声明的私有变量只能由该构造函数作用域内的函数访问。当函数在构造函数外部定义时,例如使用原型属性,这会带来限制。
原型定义的函数和私有变量
考虑以下代码,其中TestClass 有一个私有变量 privateField:
TestClass = function(){ var privateField = "hello"; this.nonProtoHello = function(){alert(privateField)}; }; TestClass.prototype.prototypeHello = function(){alert(privateField)};
在此示例中,构造函数中定义的 nonProtoHello 可以访问 privateField,而使用原型定义的prototypeHello 则不能。这是因为原型上定义的函数未在构造函数的范围内定义。
重写私有变量访问
不可能允许原型定义的函数直接访问私有变量。这本质上会创建一个 JavaScript 不支持的反向作用域机制。
替代方案:Getters 和 Setters
要启用原型定义的函数来操作私有变量,您可以使用此对象在构造函数中创建 getter 和 setter。这些公共方法可以访问私有变量并允许它们被原型函数更改。这是一个示例:
function Person(name, secret) { // public this.name = name; // private var secret = secret; // public methods have access to private members this.setSecret = function(s) { secret = s; } this.getSecret = function() { return secret; } } // Must use getters/setters Person.prototype.spillSecret = function() { alert(this.getSecret()); };
以上是如何从 JavaScript 中的原型定义函数访问私有变量?的详细内容。更多信息请关注PHP中文网其他相关文章!