วิธีเรียก Parent Method จาก Overriding Method ในคลาส Child

ฉันจะเข้าถึงเมธอดจากคลาสพาเรนต์ที่ถูกแทนที่ในคลาสลูกได้อย่างไร ในตัวอย่างของฉันด้านล่าง ฉันต้องการเรียกใช้เมธอด bar.my_name() ภายในเมธอดแทนที่ใน foo.my_name()

function bar() {
  this.my_name = function() {
    alert("I Am Bar");
  }
}

function foo() {
  this.my_name = function() {
    alert("I Am Foo");
    //access parent.my_name()
  }
}

foo.prototype = Object.create(bar.prototype);
foo.prototype.constructor = foo;

var test = new foo();
test.my_name();

person helloworld2013    schedule 31.03.2014    source แหล่งที่มา
comment
คุณไม่ได้ใช้ต้นแบบเลยในโค้ดตัวอย่าง การตั้งค่า foo.prototype ไม่ได้ทำอะไรเลยเพราะ bar มีเพียงตัวแปรอินสแตนซ์เท่านั้น บางทีคำตอบต่อไปนี้อาจช่วยให้คุณเข้าใจต้นแบบ JavaScript ได้: stackoverflow.com/a/16063711/1641941   -  person HMR    schedule 01.04.2014


คำตอบ (2)


คุณสามารถทำได้:

(new bar()).my_name.call(this);

ฉันคิดว่าคุณสับสนเล็กน้อยเกี่ยวกับวิธีการทำงานของต้นแบบ เนื่องจากมันไม่ได้ช่วยคุณจริงๆ ในที่นี้

นี่อาจจะดีกว่าเล็กน้อย:

var bar = {
    my_name: function () {
        console.log('bar name');
    }
};

var foo = Object.create(bar);

foo.my_name = function () {
    console.log('foo name');
    bar.my_name.call(this);
};

หรือถ้าคุณต้องการใช้คอนสตรัคเตอร์ บางอย่างเช่นนี้:

function Bar () {}

Bar.prototype.my_name = function () {
    console.log('bar name');
};

var foo = Object.create(Bar.prototype);

foo.my_name = function () {
    console.log('foo name');
    bar.my_name.call(this);
};

แต่ฉันไม่แน่ใจจริงๆ ว่าคุณกำลังพยายามทำอะไรหรือเพราะเหตุใด ดังนั้นเมื่อมีบริบทมากขึ้น การให้คำแนะนำที่ดีขึ้นจะง่ายกว่า

person Tom    schedule 31.03.2014
comment
ฉันคิดว่านี่เหมาะสมกับสิ่งที่ฉันต้องการทำให้สำเร็จ บางทีฉันแค่ต้องมีความเข้าใจที่ดีขึ้นกับต้นแบบ - person helloworld2013; 01.04.2014

หนึ่งในวิธีแก้ปัญหาที่เป็นไปได้คือการย้ายเมธอดไปยังต้นแบบคลาสพื้นฐาน

function bar() {
}

bar.prototype.my_name = function() {
  alert("I am bar");
}

function foo() {
}

foo.prototype = Object.create(bar.prototype);
foo.prototype.my_name = function() {
    alert("I Am Foo");
    bar.prototype.my_name.call(this);
}

foo.prototype.constructor = foo;

var test = new foo();
test.my_name();
person Wiktor Zychla    schedule 31.03.2014