class A {
f1() {
f2();
}
f2() {}
}
var a = new A();
console.log(a.f1());
未定义返回f2。
鉴于:
{
function f1() {
return f2();
}
function f2() {
return 'f2';
}
console.log(f1());
}
打印'f2'
我只是想知道为什么类中的函数没有被提升?
答案 0 :(得分:4)
class A {
f1() {
return f2()
}
f2() {
return 'f2'
}
}
var a = new A()
console.log(a.f1())
不等于
{
function f1() {
return f2()
}
function f2() {
return 'f2'
}
console.log(f1())
}
相反,它是语法糖:
function A() {
}
A.prototype.f1 = function () {
return f2()
}
A.prototype.f2 = function () {
return 'f2'
}
var a = new A()
console.log(a.f1())
在这种形式中,应该更清楚为什么引用f2
失败:范围内没有f2
函数。由于函数是在原型上设置的,因此您需要使用this
:
class A {
f1() {
return this.f2()
}
f2() {
return 'f2'
}
}
var a = new A()
console.log(a.f1())