简体   繁体   English

无法从javascript中的原型访问构造函数的值?

[英]Unable to access constructor's value from a prototype in javascript?

JSFiddle 的jsfiddle

Question: Why is this.decks.push(data); 问题:为什么this.decks.push(data); coming up undefined? 即将出现未定义? How can I get deckCtrl.decks to properly log out? 如何获取deckCtrl.decks正确注销?

Error: Uncaught TypeError: Cannot read property 'push' of undefined 错误: 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); 

You need to use new to create a new instance: 您需要使用new来创建新实例:

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

And you want to use the addDeck of the instance, not of the prototype: 您想使用实例的addDeck而不是原型的addDeck:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM