分配和功能执行

assignment and function execution

本文关键字:执行 功能 分配      更新时间:2023-09-26

我不确定为什么这会导致未定义的

  var foo = {
    bar: function(){ return this.baz; },
    baz: 1
  }
  console.log(typeof (f = foo.bar)());

知道吗?

您需要调用bar函数来获得baz

var foo = {
    bar: function () {
        return this.baz;
    },
    baz: 1
};
console.log(typeof (f = foo.bar()));

这取决于函数的调用方式。当调用f()时,上下文被设置为Window对象。由于没有全局变量baz,函数f将返回undefined

您可以通过在bar()中记录this来验证这一点。

var foo = {
  bar: function() {
    console.log(this);
    return this.baz;
  },
  baz: 1
}
console.log('Called on foo', typeof foo.bar());
console.log('Called as `f()`', typeof(f = foo.bar)());

要更改函数的上下文,可以使用Function#callFunction#applyFunction#bind

var foo = {
    bar: function () {
        return this.baz;
    },
    baz: 1
};
console.log('Called as `f().call(foo)`', typeof (f = foo.bar).call(foo));
console.log('Called as `f().apply(foo)`', typeof (f = foo.bar).apply(foo));
console.log('Using bind', typeof (f = foo.bar).bind(foo)());

您希望找到什么?

如果您希望获得foo.bar中的"function",那么您应该像这样重写代码:

 var foo = {
    bar: function(){ return this.baz; },
    baz: 1
  }
  console.log(typeof (f = foo.bar));

我想你有一组括号,它不应该存在->就在"(f=foo.bar)"部分之后。

但是,如果你试图获得foo.baz的类型,那么你应该重写这样的代码:

 var foo = {
    bar: function(){ return foo.baz; },
    baz: 1
  }
  console.log(typeof (f = foo.bar));

"this"是未定义的,因为它是singletone js对象,而不是类(函数)。