Javascript 获取位于同一对象中的函数的引用

Javascript 获取位于同一对象中的函数的引用,javascript,scope,Javascript,Scope,我不明白为什么以下方法不起作用: var foo = { f1: () => 5, f2: this.f1() } 我得到这个错误: TypeError:this.f1不是函数 似乎这个指的是全局范围,而不是foo。以下各项都可以正常工作: var foo = { f1: () => 5, f2() { return this.f1 } } var foo = { f1: () => 5 } foo.f2 = foo.f1 有没有一种方法可以引用f1而不将其包装到新函数中

我不明白为什么以下方法不起作用:

var foo = { f1: () => 5, f2: this.f1() }
我得到这个错误:

TypeError:this.f1不是函数

似乎
这个
指的是全局范围,而不是
foo
。以下各项都可以正常工作:

var foo = { f1: () => 5, f2() { return this.f1 } }
var foo = { f1: () => 5 }
foo.f2 = foo.f1

有没有一种方法可以引用
f1
而不将其包装到新函数中?

执行赋值的范围是全局范围,因此
不是
foo
。有人可能会认为这会解决这个问题:

var foo = { f1: () => 5, f2: foo.f1() }
但事实并非如此——因为在文本构造对象时,赋值没有发生,而且
foo
仍然是
未定义的

您需要考虑时间,并编写以下内容之一:

var foo = { f1: () => 5, f2() { return this.f1 } }
var foo = { f1: () => 5 }
foo.f2 = foo.f1

当然,如果您只想在运行时解析为
f1
,而不想显式调用带有括号的函数,您仍然可以作为getter偷偷地调用函数:

var foo = { f1: () => 5, get f2() { return foo.f1 } }
foo.f2
# => [Function: f1]

执行赋值的范围是全局范围,因此
不是
foo
。有人可能会认为这会解决这个问题:

var foo = { f1: () => 5, f2: foo.f1() }
但事实并非如此——因为在文本构造对象时,赋值没有发生,而且
foo
仍然是
未定义的

您需要考虑时间,并编写以下内容之一:

var foo = { f1: () => 5, f2() { return this.f1 } }
var foo = { f1: () => 5 }
foo.f2 = foo.f1

当然,如果您只想在运行时解析为
f1
,而不想显式调用带有括号的函数,您仍然可以作为getter偷偷地调用函数:

var foo = { f1: () => 5, get f2() { return foo.f1 } }
foo.f2
# => [Function: f1]

这个答案可能有帮助:

此答案还对箭头函数和常规函数之间的差异提供了有用的注释,特别是
在以下各方面的影响:

var testOne={
a:你好,
b:()=>console.log(this.a)
}
var testTwo={}
testTwo.a='hello'
testTwo.b=function(){console.log(this.a)}
log(testOne.a)
testOne.b()
log(testTwo.a)

testTwo.b()
这个答案可能很有用:

此答案还对箭头函数和常规函数之间的差异提供了有用的注释,特别是
在以下各方面的影响:

var testOne={
a:你好,
b:()=>console.log(this.a)
}
var testTwo={}
testTwo.a='hello'
testTwo.b=function(){console.log(this.a)}
log(testOne.a)
testOne.b()
log(testTwo.a)
testTwo.b()