赋值和函数执行

时间:2016-01-10 08:13:50

标签: javascript

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

UploadImage

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

你需要调用bar函数来获取baz

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

<击>

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

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

&#13;
&#13;
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)());
&#13;
&#13;
&#13;

要更改功能的上下文,您可以使用Function#callFunction#applyFunction#bind

&#13;
&#13;
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)());
&#13;
&#13;
&#13;

答案 1 :(得分:0)

你期待找到什么?

如果您希望得到&#34;功能&#34;就像在foo.bar中那样你应该像这样重写你的代码:

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

我认为你有一套不应该存在的括号 - &gt;紧跟在&#34;(f = foo.bar)&#34;一部分。

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

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

&#34;这&#34;未定义,因为它是单个js对象,而不是类(函数)。