function JSClass() {
var privateStaticVariable = "私有静态变量";
var privateStaticMethod = function() {alert("调用私有静态方法");};
return function() {
this.test1 = function() {return privateStaticVariable; }
this.test2 = function(obj) {
privateStaticVariable = obj;
privateStaticMethod = function() {alert("静态方法");}
}
this.test3 = function() {privateStaticMethod();}
};
}
var testObject1 = new JSClass();
var testObject2 = new JSClass();
document.write(testObject1.test1());
document.write("<br>");
testObject1.test2("改变的私有静态变量");
document.write(testObject2.test1());
testObject2.test3();
我的理解:
这段代码里 return function()返回的是那个匿名函数的this.test1,而后面的对象实例都是对JSClass的引用,所以最终得不到结果而这样写:
var JSClass = (function() {
var privateStaticVariable = "私有静态变量";
var privateStaticMethod = function() {alert("调用私有静态方法");};
return function() {
this.test1 = function() {return privateStaticVariable; }
this.test2 = function(obj) {
privateStaticVariable = obj;
privateStaticMethod = function() {alert("静态方法");}
}
this.test3 = function() {privateStaticMethod();}
};
})();var testObject1 = new JSClass();
var testObject2 = new JSClass();
document.write(testObject1.test1());
document.write("<br>");
testObject1.test2("改变的私有静态变量");
document.write(testObject2.test1());
testObject2.test3();//不是直接定义Javascript类,而是用一个匿名的function作为静态变量的容器,并返回Javascript类最后可以得到document.write(testObject1.test1());等结果
return返回的this.test1可以共享给最外层函数,并且privateStaticVariable这个变量可以维持改变为什么(function(){})()这样写就可以实现内层嵌套函数的this.test1共享和局部变量的改变呢?
var privateStaticVariable = "私有静态变量";
var privateStaticMethod = function() {alert("调用私有静态方法");};
return function() {
this.test1 = function() {return privateStaticVariable; }
this.test2 = function(obj) {
privateStaticVariable = obj;
privateStaticMethod = function() {alert("静态方法");}
}
this.test3 = function() {privateStaticMethod();}
};
}
var testObject1 = new JSClass();
var testObject2 = new JSClass();
document.write(testObject1.test1());
document.write("<br>");
testObject1.test2("改变的私有静态变量");
document.write(testObject2.test1());
testObject2.test3();
我的理解:
这段代码里 return function()返回的是那个匿名函数的this.test1,而后面的对象实例都是对JSClass的引用,所以最终得不到结果而这样写:
var JSClass = (function() {
var privateStaticVariable = "私有静态变量";
var privateStaticMethod = function() {alert("调用私有静态方法");};
return function() {
this.test1 = function() {return privateStaticVariable; }
this.test2 = function(obj) {
privateStaticVariable = obj;
privateStaticMethod = function() {alert("静态方法");}
}
this.test3 = function() {privateStaticMethod();}
};
})();var testObject1 = new JSClass();
var testObject2 = new JSClass();
document.write(testObject1.test1());
document.write("<br>");
testObject1.test2("改变的私有静态变量");
document.write(testObject2.test1());
testObject2.test3();//不是直接定义Javascript类,而是用一个匿名的function作为静态变量的容器,并返回Javascript类最后可以得到document.write(testObject1.test1());等结果
return返回的this.test1可以共享给最外层函数,并且privateStaticVariable这个变量可以维持改变为什么(function(){})()这样写就可以实现内层嵌套函数的this.test1共享和局部变量的改变呢?
解决方案 »
- “如何将16进制码流在html中显示为图片”兼容多个浏览器的方案。
- 关于extjs中导航树的设计
- 请熟悉Jquery idTabs插件的大大进
- js打开excel的问题
- 谁会用 boxover.js 控件啊?请帮帮我。
- 【请教】加载图片如何显示进度
- 请问如何在ajax提交数据的过程中弹出提示框在取得数据后关闭
- 【100分】借人气,请看一下 IIS区 的此贴。http://community.csdn.net/Expert/topic/5737/5737131.xml?temp=.955517
- 关于字符串的问题》》》》》》》》》》》。。
- 我写的一个关于javascript读取cookie内容的function
- js编码转换问题
- 菜鸟如何学会javascript?
==>
document.write((new testObject1()).test1());
this.test1 = function() {return privateStaticVariable; }
this.test2 = function(obj) {
privateStaticVariable = obj;
privateStaticMethod = function() {alert("静态方法");}
}
this.test3 = function() {privateStaticMethod();}
};
而这var privateStaticVariable = "私有静态变量";
var privateStaticMethod = function() {alert("调用私有静态方法");};
原本该是全局变量的变量变成了局部变量,被隐藏起来,在外面不得使用,但是这个return 出来的function却可以使用,这就是闭包的作用。
function JSClass() {
var privateStaticVariable = "私有静态变量";
var privateStaticMethod = function() {alert("调用私有静态方法");};
return function() {
this.test1 = function() {return privateStaticVariable; }
this.test2 = function(obj) {
privateStaticVariable = obj;
privateStaticMethod = function() {alert("静态方法");}
};
this.test3 = function() {privateStaticMethod();}
};
}var testObject1 = new JSClass();
var testObject2 = new JSClass();
var test = new testObject1();
var test2 = new testObject2();
document.write(test.test1());
document.write("<br>");
test.test2("改变的私有静态变量");
document.write(test2.test1());
test2.test3();testObject1远非对象实例,相反,他是对象本身。这个对象就是下面那个例子中执行结果中的JSClass的身份。
var obj = new testObject1();
你下面的方式实质上是一样的,
var testObject1 = new JSClass();
区别在哪呢
就是那个局部变量的共享上前者是2个独立的对象,那么可以想象是不同的块内的数据后者则是共享着那个局部变量,testObject1和testObject2是同一个对象的2个不同的实例(这个解释有点牵强)。