【问题标题】:Passing values inbetween functions within an object在对象内的函数之间传递值
【发布时间】:2015-10-18 05:59:18
【问题描述】:

我正在制作一个迷你日历。我正在尝试将适当的值传递到对象的视图部分。但是我一直在视图部分中变得不确定。我究竟做错了什么?

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()

【问题讨论】:

  • init返回this?
  • @torazaburo 在这种情况下不会有任何区别,因为date 对象不是从外部使用的。

标签: javascript function object


【解决方案1】:

两件事:

  1. 将当前月份传递给view 函数。您可以使用 getMonth() 从日期对象获取月份
  2. 将同一个月从view 传递给stringifyMonth

查看突出显示的更改和 cmets

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();

【讨论】:

  • 你能解释一下为什么它不像我以前那样工作吗?它与范围有关吗?
  • @YoniMessing 由于您没有传递参数,因此它们的值为undefined,因此会引发错误。如果您不想将它们作为参数传递并直接访问,则需要使用this.varName
【解决方案2】:

stringifyMonth 需要一个参数,但您没有传递一个参数。 因此,null 作为参数传递,然后您尝试访问未定义的 this.monthsArray[null]。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多