【问题标题】:this does not return object property (arrow, this)this 不返回对象属性(箭头,this)
【发布时间】:2021-08-20 05:53:03
【问题描述】:
var std_obj = {
  activeEffect : 'fade',
  name : 'Jane',
  displayMe() {
    const doSomeEffects = () => {
      if (this.activeEffect === 'fade') { 
        console.log(this.name); // this.name have accesss and logs
        // return this.name --> gives undefined ? why can't I return?
      }
    };
    doSomeEffects();
  }
};
console.log(std_obj.displayMe());

// console.log(this.name) 有效,但我无法返回 this.name,我有点沮丧

【问题讨论】:

    标签: javascript object return this arrow-functions


    【解决方案1】:

    箭头函数将采用其声明范围的this。这就是为什么这里的this 将指向该对象。但是要看到该值,您必须像这样更改代码:

    
    var std_obj = {
      activeEffect : 'fade',
      name : 'Jane',
      displayMe() {
        const doSomeEffects = () => {
          if (this.activeEffect === 'fade') { 
            console.log(this.name); // this.name have accesss and logs
            return this.name; //uncomment this
          }
        };
        return doSomeEffects(); //if you do not use return statement, then it will by default return undefined
      }
    };
    console.log(std_obj.displayMe());
    
    

    如果您不从 displayMe() 或 doSomeEffects() 返回任何内容,则不会显示 undefined。原因是函数默认返回undefined。要对此进行测试:只需在开发控制台中运行console.log("hello");。这将显示 hello 和 undefined。

    注意:如果您使用函数表达式而不是箭头函数,它将返回未定义。这就是箭头函数的威力。

    【讨论】:

      【解决方案2】:

      您不是从displayMe 返回,而是从doSomeEffects 返回。 displayMe的最后一行是doSomeEffects(),没有返回值。你需要return doSomeEffects()。

        displayMe() {
          const doSomeEffects = () => {
            if (this.activeEffect === 'fade') { 
              console.log(this.name); // this.name have accesss and logs
              return this.name  // return from `doSomeEffect`
            }
          };
          return doSomeEffects(); // return from `displayMe`
        }
      

      【讨论】:

        【解决方案3】:

        我不确定,但我认为

        var std_obj = {
          activeEffect : 'fade',
          name : 'Jane',
          displayMe() {
            const doSomeEffects = () => {
              if (this.activeEffect === 'fade') { 
                console.log(this.name);
                return this.name
              }
            };
            return doSomeEffects();
          }
        };
        console.log(std_obj.displayMe());
        

        这就是你想要做的事情

        doSomeEffects 内 displayMe 返回 this.name 并且您正在调用 displayMe

        我说的对吗?

        【讨论】:

        • 是的,我忘记添加 return 所以 displayMe() 没有返回任何东西,谢谢
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-26
        • 2017-06-23
        • 2019-02-19
        • 1970-01-01
        • 2018-02-07
        • 2016-07-23
        相关资源
        最近更新 更多