2014-03-31 220 views
1

如何從父類中訪問子類中覆蓋的方法? 在我的例子下面我想呼叫的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(); 
+1

您在示例代碼中根本沒有使用原型。設置foo.prototype不會做任何事情,因爲bar只有實例變量。也許下面的答案可以幫助你理解JavaScript原型:http://stackoverflow.com/a/16063711/1641941 – HMR

回答

1

你可以這樣做:

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

但我真的不知道你想做什麼或者爲什麼,所以在更多的背景下,更容易給你更好的建議。

+0

我認爲這是適合我想要完成的。可能我只需要更好地瞭解原型。 – helloworld2013

1

其中一個可能的解決方案是所述方法移動到基類的原型。

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