【问题标题】:Unable to access constructor's value from a prototype in javascript?无法从 javascript 中的原型访问构造函数的值?
【发布时间】:2016-05-16 21:57:48
【问题描述】:

JSFiddle

问题:为什么this.decks.push(data); 未定义?如何让deckCtrl.decks 正确注销?

错误: Uncaught TypeError: Cannot read property 'push' of undefined

var DECK_DATA = {};
DECK_DATA.cards = [
    {
        faces: [
            {
                name: 'a',
                src: '',
                link: ''
            },
            {
                name: 'b',
                src: '',
                link: ''
            },
            {
                name: 'b',
                src: '',
                link: ''
            }
        ]
    },
    {
        faces: [
            {
                name: 'a',
                src: '',
                link: ''
            },
            {
                name: 'b',
                src: '',
                link: ''
            },
            {
                name: 'b',
                src: '',
                link: ''
            }
        ]
    }
];
//Classes
var Deck = (function () {
    function Deck(card) {
        this.cards = card;
    }
    return Deck;
})();
var DeckController = (function () {
    function DeckController() {
        this.decks = [];
    }
    DeckController.prototype.addDeck = function (data) {
        console.log(data, this.decks); //this.decks comes up undefined.
        this.decks.push(data);
    };
    return DeckController;
})();
//main
var deckBuilder = Deck;
var deckCtrl = DeckController;
DECK_DATA.cards.forEach(function (item) {
    deckCtrl.prototype.addDeck(new deckBuilder(item));
});
console.log(deckCtrl.decks); 

【问题讨论】:

    标签: javascript arrays oop constructor prototype


    【解决方案1】:

    你需要使用new创建一个新实例:

    var deckBuilder = new Deck();
    var deckCtrl = new DeckController();
    

    而且你想使用实例的 addDeck,而不是原型的:

    DECK_DATA.cards.forEach(function (item) {
        deckCtrl.addDeck(new deckBuilder(item));
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-09
      • 2020-07-11
      • 2015-10-10
      • 1970-01-01
      • 2015-04-06
      • 2017-08-21
      相关资源
      最近更新 更多