2011-08-20 75 views
4

讓我們創建這從另一個匿名對象繼承的對象:如何訪問被自己的屬性遮蔽的原型鏈中的屬性?

var obj = Object.create({ 
    func: function() { alert('Inherited method'); } 
}); 

現在obj繼承匿名對象func方法(obj的原型鏈接指向匿名對象)。

obj.func(); // alerts 'Inherited method' 

但是,如果我們對obj自己分配一個func財產,繼承func屬性爲陰影

obj.func = function() { alert('Own method'); }; 

obj.func(); // alerts 'Own method' 

現場演示:現在http://jsfiddle.net/PLxHB/

,如果我們想調用暗影func方法(提醒的方法),那麼做什麼是一個好方法?

我已經想出了一個解決方案 - see here - 但它是一種黑客。

回答

3
Object.getPrototypeOf(obj).func(); 

將確保繼承的函數得到執行。

在舊的瀏覽器(上面是ES5),你可以使用

obj.__proto__.func(); 

,但是不贊成這種方式。

http://jsfiddle.net/pimvdb/PLxHB/5/

+0

是啊...... ES5來保存一天':)' –

+0

這是一個遺憾,他們沒有一個方法去替代 - 比如'obj.proto()FUNC()'。 。那樣會更方便... –

+0

@ŠimeVidas:JavaScipt根本不是最方便的語言... – pimvdb

相關問題