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
。
答案 0 :(得分:2)
简而言之:事实并非如此。
教程是完全错误的。人们无法在JavaScript对象中实现私有成员,因为语言不支持隐藏它们。他们总是可以访问 - 无论如何。
但是,该教程既没有由Sencha编写,审核也没有得到批准,Sencha正在开发,销售和支持该框架。
此外,没有任何指定作者,没有法律声明,域名出现空白。
在这种情况下,您不应该信任该页面上的任何信息。
你甚至不能相信ExtJS文档是完全正确的,更不用说匿名的第三方“教程”......