2015-10-18 34 views
2

我在制作迷你日历。我正在尝试将适当的值传递给对象的视图部分。但我一直在视图部分未定义。我究竟做错了什么?在对象内传递函数中的值

var date = { 

    monthsArray: ["January", "February","March","April","May","June","July","August", "September", "October", "November","December" ], 
    init: function() { 
    var fullDate = new Date(); 
    this.dateParsed(fullDate); 
    this.view(); 
    }, 
    stringifyMonth: function(monthNumber) { 
    var monthName = this.monthsArray[monthNumber] 
    return monthName 
    }, 
    dateParsed: function(fullDate){ 
    var fullDate = new Date(); 
    var monthNumber = fullDate.getMonth(); 
    var dayNumber = fullDate.getDate(); 
    var calanderYear = fullDate.getFullYear(); 
    this.stringifyMonth(monthNumber) 
    return calanderYear 
    }, 
    view: function(monthName){ 

    console.log(this.stringifyMonth()) /// undefined 


    } 

}.init() 
+0

从'init'返回'this'? – 2015-10-18 06:01:40

+0

@torazaburo在这种情况下不会有任何区别,因为'date'对象不是从外部使用的。 – Tushar

回答

2

stringifyMonth期望一个参数,但是你没有通过一个参数。 因此,null作为参数传递,然后尝试访问未定义的this.monthsArray [null]。

尝试传递一个参数像1,你会看到它打印二月。

3

两件事情:

  1. 通当月的view功能。您可以使用getMonth()
  2. 获得一个月日期对象同月从view

传递给stringifyMonth见突出的变化和评论

var date = { 
 

 
    monthsArray: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], 
 
    init: function() { 
 
    var fullDate = new Date(); 
 
    this.dateParsed(fullDate); 
 

 
    
 
    // Get the current month from date object and pass to the view() 
 
    this.view(fullDate.getMonth()); // <----- 
 
    }, 
 
    stringifyMonth: function(monthNumber) { 
 
    var monthName = this.monthsArray[monthNumber] 
 
    return monthName 
 
    }, 
 
    dateParsed: function(fullDate) { 
 
    var fullDate = new Date(); 
 
    var monthNumber = fullDate.getMonth(); 
 
    var dayNumber = fullDate.getDate(); 
 
    var calanderYear = fullDate.getFullYear(); 
 
    this.stringifyMonth(monthNumber) 
 
    return calanderYear 
 
    }, 
 
    view: function(monthName) { 
 
    
 
    // Pass the monthName to the stringifyMonth() 
 
    console.log(this.stringifyMonth(monthName)); // <----- 
 
    } 
 
}.init();

+0

很好的答案!谢谢 –

+0

你能解释为什么它没有按照我的方式工作吗?它与范围有关吗? –

+0

@YoniMessing由于你没有传递参数,它们的值是'undefined',所以错误被抛出。如果您不想将它们作为参数传递并直接访问,则需要使用'this.varName' – Tushar