javascript - 闭包中的局部变量如何成为 Ext JS 中的私有(private)成员变量?

标签 javascript extjs private-members

教程位于http://www.extjs-tutorial.com/extjs/declare-private-members-in-class-extjs提供了在 Ext JS 类中声明私有(private)成员的示例。但我不明白这是一个私有(private)成员的例子。

这是我编写的代码,与上面链接中的代码非常相似。唯一的区别是我的代码有完整的 HTML 来演示 JavaScript 代码,并且有一个额外的语句试图警告名为 name 的所谓私有(private)成员变量。

<!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

事实上,我不明白对象 vaiable this.name 与闭包的局部变量 name 有何关系?它们是完全不同的两个东西。

教程中的代码是如何演示私有(private)变量的?

我想也许教程的意思是这样的。

<!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 确实是闭包的本地变量,但它的行为不再像成员变量,因为两个对象 studentObjXstudentObjA 共享相同的名称。两个警报显示相同的名称,即 ABC

最佳答案

简而言之:事实并非如此。

该教程完全错误。我们无法在 JavaScript 对象中实现私有(private)成员,因为该语言不支持隐藏它们。它们始终可以通过某种方式访问​​。

但是,该教程既不是由负责开发、销售和支持该框架的 Sencha 公司编写、审查或批准的。

此外,没有署名作者,没有法律声明,域名 whois 也显示为空白。

在这种情况下,您不应信任该页面上的任何信息。

你甚至不能相信 ExtJS 文档是完全正确的,更不用说匿名的第 3 方“教程”了......

关于javascript - 闭包中的局部变量如何成为 Ext JS 中的私有(private)成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35251435/

相关文章:

sencha-touch - 如何在商店中更改/添加参数

Javascript:我应该隐藏我的实现吗?

java - 我应该如何将对象添加到私有(private)静态ArrayList?

javascript - 在模糊事件期间选择此输入

javascript - 创建具有 3 个属性的 json 文件

javascript - ExtJS 3.4.1 网格面板删除标题偏移

objective-c - 在 Objective-C 中在哪里隐藏你的隐私

javascript - 在 JavaScript 中连续遍历数组

javascript - Phonegap Android Webview 视频只播放音频

filter - Sencha Touch 过滤器 ListView 数据存储