[英]Unable to call 'private' method from javascript namespace?
我試圖了解如何通過javascript文件分解功能。 我試圖將名稱空間視為單例類。 我不明白為什么在下面的代碼中, MODULE_A.privateMethod1()
拋出錯誤: Uncaught TypeError: undefined is not a function
。 當我打開記錄的對象時,我也看不到私有方法。
index.html的:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Test Project</title>
<script src="index.js"></script>
<script src="moduleA.js"></script>
</head>
<body>
<div>
hi
</div>
</body>
</html>
index.js:
(function() {
var initializeWindow = function() {
console.log("initializeWindow");
MODULE_A.publicMethod1();
};
window.addEventListener('load', initializeWindow);
})();
moduleA.js:
// "Singleton Class"
var MODULE_A = (function() {
// ---------------------------------------------------------------------------
// "Private" Class Constants
// ---------------------------------------------------------------------------
var A_CONSTANT_NUMBER = 1;
// ---------------------------------------------------------------------------
// "Private" Class Variables (Properties)
// ---------------------------------------------------------------------------
var myPrivateVar_ = 2;
// ---------------------------------------------------------------------------
// "Private" Methods
// ---------------------------------------------------------------------------
var privateMethod1 = function() {
console.log("A.privateMethod1");
};
var privateMethod2 = function() {
console.log("A.privateMethod2");
};
return {
// ---------------------------------------------------------------------------
// "Public" Class Variables (Properties)
// ---------------------------------------------------------------------------
aPublicVar1: 3,
// ---------------------------------------------------------------------------
// "Public" Methods
// ---------------------------------------------------------------------------
publicMethod1: function() {
console.log("A.publicMethod1");
this.publicMethod2();
// ERROR HERE!!!
this.privateMethod1();
this.privateMethod2();
},
publicMethod2: function() {
console.log("A.publicMethod2");
}
}
})();
解決方案是兩者之一:
當您使用var
聲明某些內容時,無法使用this
方法訪問this
要么:
this.privateMethod1 = function() {
console.log("A.privateMethod1");
};
要么
publicMethod1: function() {
console.log("B.publicMethod1");
this.publicMethod2();
privateMethod1();
privateMethod2();
},
編輯:如果您希望該方法為私有方法,則應遵循方法2,您可以訪問此網站以獲取更多說明。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.