gpt4 book ai didi

javascript - javascript中的嵌套类,私有(private)方法的继承

转载 作者:可可西里 更新时间:2023-11-01 01:59:02 25 4
gpt4 key购买 nike

我是 javascript 的新手,我花了一些时间尝试在 js 中创建命名空间对象。

现在,这就是我想要做的:

MainObject = function() {

var privateVariable = "i'm private";

var privateMethod = function() {
// doSomething
}

this.publicMethod = function() {
// doPublicSomething
}
}

MainObject.prototype.nested = function() {

this.publicNestedMethod = function() {

// that's not working at all
this.privateMethod(privateVariable);

}
}

MyObject = new MainObject();

MyObject.publicMethod();
MyObject.publicNestedMethod();

我试图将嵌套类包含在第一个类中,但如果我尝试它也不起作用:

this.nested = function() {

var mainObject = this;

return {
publicNestedMethod = function() {
mainObject.privateMethod();
}
}
}();

有人可以帮助我吗?我会对此失去理智。

斐德拉。

最佳答案

闭包是一种词汇特征,而不是语义特征。如果对象在另一个的词法范围之外,它就不能再“嵌套”并访问前者的局部变量。在嵌套函数/类的代码中,没有 this.privateMethod 这样的东西,因为 privateMethod 从不成为主要对象。它只是一个函数内部的局部变量。

JavaScript 中没有诸如“私有(private)属性”、“私有(private)方法”或“私有(private)成员”之类的东西。 hell ,没有所谓的“类(Class)”。有些人喜欢像上面那样使用局部变量来模拟私有(private)成员,但是这样做会导致这样的情况,这两个概念之间的差异来了,并在后面咬了一个。

总而言之,在 JS 中编写带有所有 OO 技术的 Java 代码是一个坏主意,就像在 C# 中编写带有所有指针和无限缓冲区的 C 代码一样是一个坏主意。当然,在这两种情况下您都可以做到,但是您将无法以这种方式欣赏和利用该语言的功能。

现在我已经讲完了,你可以做这样的事情来获得“命名空间”函数:

MainObject = function() {
var privateVariable = "I'm private";

var privateMethod = function() {
alert('Private');
}

this.publicMethod = function() {
alert('Public');
}

this.nested = {
publicNestedMethod: function() {
privateMethod();
}
};

// or

this.nested = (function() {
var nestedPrivate = 5;

return {
publicNestedMethod: function() {
alert(nestedPrivate);
privateMethod();
}
};
})();
}

MyObject = new MainObject();

MyObject.publicMethod();
MyObject.nested.publicNestedMethod();​

关于javascript - javascript中的嵌套类,私有(private)方法的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2286987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com