http://www.extjs-tutorial.com/extjs/declare-private-members-in-class-extjs的教程提供了一個在Ext JS類中聲明私有成員的例子。但我不明白這是一個私人成員的例子。在Ext JS中,一個閉包中的局部變量是一個私有成員變量?
這是我寫的代碼,它非常類似於上面鏈接中的代碼。唯一的區別是我的代碼有完整的HTML來演示JavaScript代碼,並且它有一個額外的語句,試圖提醒所謂的私有成員變量name
。
<!DOCTYPE html>
<html>
<head>
<title>Ext-JS Private Problem</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/extjs/6.0.0/ext-all.js"></script>
<script>
Ext.define('Student', function(){
var name = 'unnamed';
return {
constructor : function(name){
this.name = name;
},
getName : function(){
alert('Student name is ' + this.name);
}
};
});
//create an object of Student class
var studentObj = Ext.create('Student','XYZ');
studentObj.getName();
alert(studentObj.name);
</script>
</head>
<body>
</body>
</html>
這段代碼中的警報都成功了。事實上,最終警報成功顯示XYZ
。
其實我不明白對象可變的this.name
甚至與關閉的局部變量name
有關嗎?他們完全是兩碼事。
那麼教程中的代碼如何演示一個私有變量呢?
我想也許教程的意思是這樣的。
<!DOCTYPE html>
<html>
<head>
<title>Ext-JS Private Problem</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/extjs/6.0.0/ext-all.js"></script>
<script>
Ext.define('Student', function(){
var name = 'unnamed';
return {
constructor : function(n){
name = n;
},
getName : function(){
alert('Student name is ' + name);
}
};
});
//create an object of Student class
var studentObjX = Ext.create('Student','XYZ');
var studentObjA = Ext.create('Student','ABC');
studentObjX.getName();
studentObjA.getName();
</script>
</head>
<body>
</body>
</html>
在這種情況下,變量name
確實是本地的關閉,但它並不像一個成員變量了,因爲這兩個對象studentObjX
和studentObjA
共享相同的name
。兩個警報顯示相同的名稱,即ABC
。