闭包中的局部变量如何成为 Ext JS 中的私有成员变量
How is a local variable in a closure a private member variable in Ext JS?
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对象中实现私有成员,因为语言不支持隐藏它们。它们始终是可访问的 - 一种或另一种方式。
但是,该教程既没有经过开发,销售和支持该框架的公司Sencha的编写,审查或批准。
此外,没有指定的作者,没有法律声明,域名whois显示为空白。
在这些情况下,您不应信任该页面上的任何信息。
您甚至不能相信 ExtJS 文档是完全正确的,更不用说匿名的第三方"教程"了......
相关文章:
- 等待函数完成,然后将返回值分配给变量JS
- 节点中的变量.js JavaScript 不会改变
- 如何在 Node 中访问模块全局变量.js例如浏览器中的 window.variable
- 在角度中使用父范围变量.js
- 在重新声明变量 (JS) 时遇到了问题
- 在主干中使用全局变量.js .最佳实践
- 在节点中使用变量.js mysql-node 查询
- 如果变量 JS 太高,则启动/停止反转
- 变量 Js 在 PHP 代码中不起作用
- 无法使用车把正确在我的“模板”中显示变量.js
- 引导程序中的全局变量.js在 Firefox for Android 扩展中
- Webstorm 中的“未解析变量 JS”
- 变量JS的子字符串值
- 动态更新变量JS
- 不能用一个主变量访问单个变量[jS]
- 创建全局变量js
- 当不同的函数需要从数据库调用数据时,如何避免使用全局变量.(JS)
- 变量JS中的变量
- 本地存储变量js
- 为循环追加变量js