我不确定为什么会导致未定义
UploadImage
有什么想法吗?
答案 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()
来验证这一点。
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#call
或Function#apply
或Function#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)());

答案 1 :(得分:0)
你期待找到什么?
如果您希望得到"功能"就像在foo.bar中那样你应该像这样重写你的代码:
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));
"这"未定义,因为它是单个js对象,而不是类(函数)。