嵌套类在javascript中,继承私有方法

前端之家收集整理的这篇文章主要介绍了嵌套类在javascript中,继承私有方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在 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永远不会成为MainObject的属性.它只是一个函数内部的局部变量.

在JavaScript中没有“私有属性”,“私有方法”或“私有成员”这样的东西.地狱,没有像“课”这样的事情.有些人喜欢使用上面的局部变量来模仿私人会员,但是这样做会导致这样的情况,两个概念之间的差异来自于后面的一个.

总而言之,使用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();​
原文链接:https://www.f2er.com/js/151738.html

猜你在找的JavaScript相关文章