Bagaimana memanggil Metode Induk dari Metode Overriding di kelas Anak

Bagaimana saya bisa mengakses metode dari kelas induk yang ditimpa di kelas anak? Dalam contoh saya di bawah ini, saya ingin memanggil metode bar.my_name() di dalam metode utama di 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 sumber
comment
Anda tidak menggunakan prototipe sama sekali dalam kode contoh. Pengaturan foo.prototype tidak melakukan apa pun karena bar hanya memiliki variabel instan. Mungkin jawaban berikut dapat membantu Anda memahami prototipe JavaScript: stackoverflow.com/a/16063711/1641941   -  person HMR    schedule 01.04.2014


Jawaban (2)


Anda bisa melakukan ini:

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

Saya pikir Anda sedikit bingung tentang cara kerja prototipe, karena mereka tidak terlalu membantu Anda di sini.

Ini mungkin sedikit lebih baik:

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);
};

Atau jika Anda ingin menggunakan konstruktor, kira-kira seperti ini:

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);
};

Namun saya tidak begitu yakin apa yang Anda coba lakukan atau mengapa, jadi dengan konteks yang lebih banyak, akan lebih mudah untuk memberi Anda saran yang lebih baik.

person Tom    schedule 31.03.2014
comment
Saya pikir ini sesuai dengan apa yang ingin saya capai. Mungkin saya hanya perlu memiliki pemahaman yang lebih baik tentang prototipe. - person helloworld2013; 01.04.2014

Salah satu solusi yang mungkin adalah memindahkan metode ke prototipe kelas dasar.

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