与“新”运算符无关......在这里你得到一个关于 proto/constructor 的很好解释的主题:
http ://en.wikibooks.org/wiki/JavaScript/Access_Control
但是这是一个无意义的示例,您可以这样做,因此您只能通过 getter 和 setter 方法访问 priv:
function Calculator2() {
var priv = 0;
this.public = 0;
this.getPriv = function(){
return priv;
}
this.setPriv = function(val){
priv = val;
}
}
Calculator2.prototype.changePriv = function(){
this.setPriv(this.getPriv()+1);
}
Calculator2.prototype.printPriv = function(){
console.log("priv = " + this.getPriv());
}
Calculator2.prototype.changePublic = function(){
this.public++;
}
Calculator2.prototype.printPublic = function(){
console.log(this.public);
}
在这种情况下,始终可以通过 getter 和 setter 方法访问 var priv,
在下一个示例中,您有一个 private var className和另一个 public var __className :
<div id = "outputDiv" style="width:600px;height:400px;border:solid 1px #000"></div>
<script type="text/javascript">
//<![CDATA[
//脚本 : var SomeClass = function(className) {
var __className__ = className;
this.__className__ = "\"public default className\"";
var someString = new String("");
this.setScopeText = function() { // void
someString = "A new instance of \"private [__classname__] : " +
__className__ + "\"" +
" has been created. Refering to [__className__]<br />" +
"A new instance of " +
this.__className__ +
" has been created. Refering to [this.__className__]";
return someString;
};
this.getScopeText= function (){
return someString;
}
this.setOutput = function(elementId, someString){
var outputPane = this.getSomePane(elementId);
outputPane.innerHTML += "<p>" + someString + "</p>";
}
this.getSomePane = function(elementId){
var outputP = document.getElementById(elementId);
return outputP;
}
}
SomeClass.prototype.changeClassNameVariable = function( str ){
this.__className__ = str;
}
// 结束声明。
//测试:
var sc = new SomeClass("foo");
sc.setOutput("outputDiv",sc.__className__);
sc.setOutput("outputDiv",sc.setScopeText());
sc.setOutput("outputDiv",sc.getSomePane("outputDiv"));
sc.__className__ = "\"Some name\"";
sc.setOutput("outputDiv",sc.__className__);
sc.setOutput("outputDiv",sc.setScopeText());
sc.changeClassNameVariable("bar");
sc.setOutput("outputDiv",sc.__className__);
sc.setOutput("outputDiv",sc.setScopeText());
// 结束 javascript 和 CDATA 部分
//]]>
</script>
在 "div:outputDiv" 中输出:
“公共默认类名”
“private [ classname ] : foo”的新实例已创建。参考 [ className ] 已创建“public default className”的新实例。参考[这个。类名]
[对象 HTMLDivElement]
“某个名字”
“private [ classname ] : foo”的新实例已创建。参考 [ className ] 已创建“某个名称”的新实例。参考[这个。类名]
酒吧
“private [ classname ] : foo”的新实例已创建。参考 [ className ] 创建了一个新的 bar 实例。参考[这个。类名]
->在构造函数中声明的类名永远不会改变!-> 这个。className或 SomeClass.prototype。className是公开的,可以更改。
我希望这可能有助于更清楚地理解链条和我的评论......