在Javascript中,可以通過使用函數構造函數及其「原型」屬性(即「未來實例的父代」)或更近的對象來實現某種繼承.create(),以獲得新的對象。讓一個JavaScript「功能對象」繼承另一個
但是最近我需要爲我的一個項目「覆蓋」Jquery對象(「$」),也就是說,提供了一個類似的函數,它也具有所有的fn/extend/... [inherited ]原始「jQuery」工廠函數的屬性。
目標是默認情況下有一個「$()」函數總是接收「window.parent」作爲第二個參數,以便整個程序修改父框架而不是加載程序的iframe 。
通常我希望能夠做這樣的事情:
var oldJQ = $;
$ = function (selector) {
return oldJQ(selector, window.parent);
}
$.__proto__ = oldJQ .__proto__;
$.extend({...}); // must work
儘管多次嘗試,我無法得到它的工作,我總是使用「新當了簡單的對象,而不是真正的功能「關鍵字,或繼承不起作用。我找到了替代方法(例如,通過將所有屬性從$複製到我的新函數對象中),但在我看來,這似乎是一種可怕的做事方式。
有什麼辦法可以有一個新的函數對象,作爲父/原型,有原始$對象嗎?
你做了什麼? –
「我總是得到簡單的物體而不是真正的功能」。考慮「函數」不是實際的數據類型。 [這些](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Data_types)是唯一的實際數據類型。這說明了嗎? –
不,這是不可能的。對象只能有一個原型,並且從'Function'繼承的東西不可調用。 ES6代理可能會有所幫助,但這不完全相同。 – Ryan