我是新手,正在使用 javascript 方式。在 关闭点 。我可以使用 new 关键字创建对象,而无需 new 关键字, 太奇怪了 我。

这里的代码:-

          function RankingManage(rank) {
                var rank = rank;
                function rankInc() {
                    rank++;
                }
                function rankDec() {
                    rank--;
                }

                return {
                    makeInc: function () {
                        rankInc();
                    },
                    makeDec: function () {
                        rankDec();
                    },
                    showRank: function () {
                        return rank;
                    }
                }
            }

            var Rank = new RankingManage(80);
            var Rank2 = RankingManage(80);
            Rank.makeInc();
            Rank2.makeInc();
            console.log(Rank.showRank());//Output:- 81
            console.log(Rank2.showRank());//Output:- 81

最佳答案

因为您正在创建和返回一个对象(使用 return { ... } ),所以您通常不会通过 RankingManage 调用 new 。您没有使用 new 运算符创建的对象,而是通过从函数返回非 new 对象来覆盖 null 表达式的默认结果。所以这两种方式都可以工作,但是将 new 与您当前编写的函数一起使用是没有意义的。

您当前的功能绝对没问题,只需在没有 new 的情况下调用它。 (并且由于它不是构造函数 - 您使用 new 调用的函数 - 按照惯例,您应该以小写字母开头,而不是大写字母。所以 rankingManage 。)

如果 您想在调用 new 时需要 RankingManage ,则可以使用 new 通过 this 关键字创建的对象:

function RankingManage(rank) {
    var rank = rank;

    function rankInc() {
        rank++;
    }

    function rankDec() {
        rank--;
    }

    this.makeInc = rankInc;
    this.makeDec = rankDec;
    this.showRank = function() {
        return rank;
    };
}

我们没有在其中使用 return,因为(再次) new RankingManage 表达式的默认结果是对 new 创建的对象的引用。

但同样,您现有的功能很好。

关于javascript - 闭包可以使用 new 关键字以及有什么区别,例如,在创建新对象/类时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34565247/

10-12 12:58