Javascript 为什么构造函数中的this.prop返回未定义

Javascript 为什么构造函数中的this.prop返回未定义,javascript,constructor,this,undefined,Javascript,Constructor,This,Undefined,我希望了解下面代码日志返回的内容中的明显差异。我希望它们是等价的,不会返回未定义的。但是,其中一个确实返回未定义的,而另一个则不返回 var floors=[{number:4,desc:`floors数组中的obj`] 功能单元(编号){ 这个数字=数字 this.floor=Number(字符串(this.Number)[0])//此处的this.property引用没有问题 console.log(this.floor)//这里的值为4,为什么不在下一行呢? console.log(fl

我希望了解下面代码日志返回的内容中的明显差异。我希望它们是等价的,不会返回未定义的
。但是,其中一个确实返回
未定义的
,而另一个则不返回

var floors=[{number:4,desc:`floors数组中的obj`]
功能单元(编号){
这个数字=数字
this.floor=Number(字符串(this.Number)[0])//此处的this.property引用没有问题
console.log(this.floor)//这里的值为4,为什么不在下一行呢?
console.log(floors.find(function(floor){return floor.number==this.floor})//为什么返回未定义
console.log(floors.find(函数(floor){return floor.number==4}))//但这不是吗?
}

新单元(425)
因为对于正常函数,
由函数调用方式定义,而不是函数出现的位置。在您的
find
回调中,
与您的
find
回调之外的不同

您至少有四种选择:

  • 将第二个参数传递给
    find
    :它定义了回调中的
    内容:

    console.log( floors.find( function ( floor ) {
        return floor.number === this.floor;
    }, this ) );
    // ^^^^
    
  • 使用
    函数#bind
    创建绑定函数:

    console.log( floors.find( function ( floor ) {
        return floor.number === this.floor;
    }.bind( this ) ) );
    // ^^^^^^^^^^^
    
    绑定函数忽略调用它的
    this
    ,而使用绑定到它的函数

  • 定义一个变量并将其设置为this
  • ,然后在回调中使用该变量:

    var me = this; // The variable
    console.log( floors.find( function ( floor ) {
        return floor.number === me.floor;
    //                          ^^
    } ) );
    
  • 从ES2015开始,您可以使用箭头函数,它关闭定义它的上下文的
    this
    ;在您的情况下,您可以使用不带
    {}
    的简明表单:

    console.log( floors.find( floor => floor.number === this.floor ) );
    
    或者这是较长的形式:

    console.log( floors.find( floor => { return floor.number === this.floor; } ) );