如何理解这段代码中代码的含义和意图?

时间:2015-04-30 06:32:40

标签: javascript

任何人都可以在function exports()之后准确解释代码的功能是什么,为什么我应该这样做呢?

(function () {
    'use strict';

    function Card() {
        this.isFaceUp = false;
        this.isUnplayalbe = false;
    }

    Card.prototype = {
        contents: function (v) {
            if (v === undefined) {
                return this._contents;
            } else {
                return this._contents = v;
            }
        },

        match: function (otherCards) {
            var score = 0;

            if (Array.isArray(otherCards)) {
                otherCards.forEach(compare, this);
            } else {
                compare.call(this, otherCards);
            }

            function compare(card) {
                if (card.contents() === this.contents()) {
                    score = 1;
                }
            }
            return score;
        }
    };

    function exports() {
        return new Card();
    }
    exports.Card = Card;
    window.card = exports;
})();

1 个答案:

答案 0 :(得分:0)

您的代码将Card属性添加到window对象,因此该属性将是一个Function对象(意味着可执行),因为该Card属性已赋值Function类型的值(导出声明为函数并分配给Card),但也是Function对象本身将具有属性Card,它是Card对象,并且该可执行属性也可以返回新的Card对象,如果被调用....

  • window.Card是导出功能
  • exports函数每次调用时都会返回新的Card对象,因此window.Card也会执行此操作(var card1 = window.Card()
  • exports函数有属性Card(我不知道为什么需要)
  • 所以window.Card.Card - 也是Card对象