2
我試着將模塊模式與構造函數相結合,但它似乎我正在查找一些東西。 實例化兩個對象並顯示其屬性後,兩個實例var似乎都引用同一個對象。模塊模式與構造函數
這是我放在一起的一個小例子。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>test</title>
<script type="text/javascript">
var guidUtils = {
/* Generates a simple UUID/GUID based on some randomisation.
*
*/
guidGenerator:function() {
var S4 = function() {
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
};
return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
}
};
var Car = (function() {
// private variables and functions
var thiz;
var ID = 'bar';
var model;
var setID = function(id){
ID = id;
};
var getID = function(){
return ID;
};
var setModel = function(pModel){
model = pModel;
};
var getModel = function(){
return model;
};
// constructor
var Car = function (pModel) {
thiz=this;
ID = guidUtils.guidGenerator();
model = pModel;
init();
};
//intialisation
function init(){
}
// prototype
Car.prototype = {
constructor: Car,
getID: getID,
getModel: getModel
};
// return Car
return Car;
})();
function show() {
var car1 = new Car("audi");
var car2 = new Car("BMW");
var car1div = document.getElementById("car1");
var car2div = document.getElementById("car2");
car1div.innerHTML=car1.getID()+" is a "+car1.getModel();
car2div.innerHTML=car2.getID()+" is a "+car2.getModel();
}
</script>
</head
<body>
<a onclick="show()" href="javascript:void(0);">show</a>
<div id="car1"></div>
<div id="car2"></div>
</body>
</html>
結果是:
可能一些解釋正是我在作出錯誤的假設?
我明白,所以封裝性能是不可能的? – 2012-03-26 21:46:22
@Neomusashi你是什麼意思封裝?讓他們「私人」?這是可能的,但所有變量都必須在**'Car'中定義**。 – 2012-03-26 22:11:48
我想我現在明白了。謝謝。唯一的問題是我將無法使用訪問器方法公開這些私有變量,除非我將該實例作爲參數傳遞。 – 2012-03-27 08:33:35