有什么方法可以使“私有”变量(在构造函数中定义的变量)可供原型定义的方法使用?
TestClass = function(){ var privateField = "hello"; this.nonProtoHello = function(){alert(privateField)}; }; TestClass.prototype.prototypeHello = function(){alert(privateField)};
这有效:
t.nonProtoHello()
但这不是:
t.prototypeHello()
我习惯于在构造函数中定义方法,但出于以下两个原因而逐渐远离它。
不,没有办法。这基本上是相反的范围。
在构造函数内部定义的方法可以访问私有变量,因为所有函数都可以访问定义它们的作用域。
在原型上定义的方法未在构造函数的范围内定义,并且将无法访问构造函数的局部变量。
您仍然可以拥有私有变量,但是如果希望在原型上定义的方法可以访问它们,则应该在this对象上定义getter和setter ,原型方法(以及其他所有方法) 都 可以访问它们。例如:
this
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()); };