繁体   English   中英

如何从内部 class 中访问外部 class 的实例变量?

[英]How do I access an instance variable of an outer class from within an inner class?

假设我有以下代码:

class Cookie{
    ChocolateChip = class{
        constructor(){
            
        }
        sayMyOuterClassName(){
            console.log(???);
        }
    }
    constructor(name){
        this.name = name;
        this.someInstance = new this.ChocolateChip();
        this.someInstance.sayMyOuterClassName();
    }
}

let aCookie = new Cookie("Bob");

我要换什么??? 为了让它打印出"Bob" 我看到有人建议Cookie.this.name ,但我害怕在不知道它的所有含义的情况下尝试它,因为我需要依赖我现在正在编写的代码,如果它在未来发生故障我不会'不希望它是因为我使用了我不完全理解的这行代码并最终浪费了大量时间。

除了这个问题,我还想问...我之前将我的类声明为 static 并像new OuterClassName.InnerClassName()一样使用它们,但我切换了,因为我认为这会阻止我从我的外部 class 访问实例变量在内部类中......对吗? 将内部 class 声明为 static 是否会阻止它访问其外部类的变量?

添加对父级的引用:

 class Cookie{ ChocolateChip = class { constructor(parent){ this.parent = parent; } sayMyOuterClassName(){ console.log(this.parent.name); } } constructor(name){ this.name = name; this.someInstance = new this.ChocolateChip(this); this.someInstance.sayMyOuterClassName(); } } let aCookie = new Cookie("Bob");

我要换什么??? 为了让它打印出"Bob"

没什么,你不能在 JavaScript 中做到这一点,而不对你的代码做进一步的改变。 除了Cookie实例上的实例属性引用ChocolateChip的实例之外, CookieChocolateChip之间没有内在联系。 您看到的Cookie.this.name语法是 Java,而不是 JavaScript。 Java和JavaScript在这方面有很大的不同。

您可能误解了用于创建ChocolateChip的语法。 没有声明“内部类”(JavaScript 没有这些)。 它只是创建一个实例属性并通过公共 class 属性建议的语法为其分配一个class表达式,这仍然只是一个建议(尽管还很远)。 您的代码在功能上与此相同:

class Cookie{
    constructor(name){
        this.ChocolateChip = class{
            constructor(){
                
            }
            sayMyOuterClassName(){
                // console.log(???);
            }
        };
        this.name = name;
        this.someInstance = new this.ChocolateChip();
        this.someInstance.sayMyOuterClassName();
    }
}

let aCookie = new Cookie("Bob");

它为每个Cookie实例创建一个新的ChocolateChip class,然后创建该新 class 的一个实例。 但是没有从ChocolateChip到语言本身实现的Cookie的链接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM