2015-09-25 87 views
0

在下面的示例中,我如何直接從Base.bar()調用Base.foo(),我明白爲什麼它首先調用Test.foo(),但有什麼辦法可以防止這種情況。如何調用基類方法而不是擴展類方法

class Base { 
    constructor() { 
     console.log('Base constructor') 
    } 

    foo() { 
     console.log('Base foo') 
    } 

    bar() { 
    console.log('Base bar') 

    this.foo(); 
    } 
} 

class Test extends Base { 
    foo() { 
    console.log('Test foo'); 

    super.foo(); 
    } 
    bar() { 
    console.log('Test bar'); 

    super.bar(); 
    } 
} 

const test = new Test(); 
test.bar(); 

輸出將是:

Base constructor 
Test bar 
Base bar 
Test foo 
Base foo 

我的預期輸出是:

Base constructor 
Test bar 
Base bar 
Base foo 
+0

換句話說,你不希望實際調用該實例的'foo'方法,但明確'Bar.prototype.foo'。那麼這正是你應該做的。 –

回答

2

您可以在使用ES2015類使用標準的JavaScript功能。在這種情況下,只需使用Function.prototype.call()

'use strict' 
 
class Base { 
 
    constructor() { 
 
     console.log('Base constructor') 
 
    } 
 

 
    foo() { 
 
     console.log('Base foo') 
 
    } 
 

 
    bar() { 
 
    console.log('Base bar') 
 

 
    Base.prototype.foo.call(this); 
 
    } 
 
} 
 

 
class Test extends Base { 
 
    foo() { 
 
    console.log('Test foo'); 
 

 
    super.foo(); 
 
    } 
 
    bar() { 
 
    console.log('Test bar'); 
 

 
    super.bar(); 
 
    } 
 
} 
 

 
const test = new Test(); 
 
test.bar();

+0

謝謝,現在我看到它的代碼很有意義。 –