【发布时间】:2016-02-07 08:44:04
【问题描述】:
http://www.extjs-tutorial.com/extjs/declare-private-members-in-class-extjs 的教程提供了在 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。
【问题讨论】:
标签: javascript extjs private-members