闭包中的局部变量如何成为 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 类 中声明私有成员的示例。但是我看不出这是私有成员的例子。

这是我写的一段代码,与上面 link 中的代码非常相似。唯一的区别是我的代码有完整的 HTML 来演示 JavaScript 代码,并且它有一个额外的语句试图警告名为 name.[=22= 的假定私有成员变量]

<!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 都有关系?它们完全是两个不同的东西。

那么教程中的代码是如何演示私有变量的呢?

我想教程可能是这个意思。

<!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 共享相同的 name。两个警报显示相同的名称,即 ABC.

简而言之:不是。

教程完全错误。无法在 JavaScript 对象中实现私有成员,因为语言不支持隐藏它们。它们始终可以访问 - 以一种或另一种方式。

但是,开发、销售和支持该框架的公司 Sencha 既没有编写、审查也没有批准本教程。

此外,没有指定作者,没有法律声明,域名 whois 是空白的。

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

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