这样,我们可以调用该方法myContainer.stamp('def'),结果为'abcdef'。 Private private成员由构造函数产生。普通的var变量和构造函数的参数都称为private成员。 Java代码 复制代码 代码如下: function Container(param) { this.member = param; var secret = 3; var that = this; } function Container(param) { this.member = param; var secret = 3; var that = this; }
该构造函数创建了3个private实例变量: param,secret和that。它们被添加到对象中,但是不能被外部访问,也不能被该对象自己的 public方法访问。它们只能由private方法访问。private方法是构造函数的内部方法。 Java代码 复制代码 代码如下: function Container(param) { function dec() { if (secret > 0) { secret -= 1; return true; } else { return false; } } this.member = param; var secret = 3; var that = this; } function Container(param) { function dec() { if (secret > 0) { secret -= 1; return true; } else { return false; } } this.member = param; var secret = 3; var that = this; }
private方法dec检查secret实例变量。如果它大于0,则减少secret并返回true,否则返回false。它可以用来让这个对象限制用3次。 按照惯例,我们定义一个private的that变量。这用来让private方法可以使用本对象。这样做是因为ECMAScript语言规范有一个错误, 该错误导致不能正确的设置this给内部方法。 private方法不能被public方法调用。为了让private方法有用,我们需要引入privileged方法。 Privileged privileged方法可以访问private变量和方法,并且它本身可以被public方法和外界访问。可以删除或替代privileged方法,但是不能 更改它或强制它泄露自己的秘密。 privileged方法在构造函数里用this分配。 Java代码 复制代码 代码如下: function Container(param) { function dec() { if (secret > 0) { secret -= 1; return true; } else { return false; } } this.member = param; var secret = 3; var that = this; this.service = function() { if (dec()) { return that.member; } else { return null; } }; } function Container(param) { function dec() { if (secret > 0) { secret -= 1; return true; } else { return false; } } this.member = param; var secret = 3; var that = this; this.service = function() { if (dec()) { return that.member; } else { return null; } }; }
Private Java代码 复制代码 代码如下: function Constructor(...) { var that = this; var membername = value; function membername(...) {...} } // 注意: function语句 // function membername(...) {...} // 是如下代码的简写 // var membername = function membername(...) {...}; function Constructor(...) { var that = this; var membername = value; function membername(...) {...} } // 注意: function语句 // function membername(...) {...} // 是如下代码的简写 // var membername = function membername(...) {...};
Privileged Java代码 复制代码 代码如下: function Constructor(...) { this.membername = function (...) {...}; } function Constructor(...) { this.membername = function (...) {...}; }