我知道這個問題可能在其他Q & A(如How does JavaScript .prototype work?問題)中被觸及,但是(我希望!)這是一個更具體的問題,爲什麼在某些情況下使用.prototype
有些「覆蓋」有些則沒有。爲了幫助說明(從ejohn.org爲例):爲什麼一些原型函數覆蓋工作而另一些不覆蓋?
function Ninja() {
this.swingSword = function() { return true; };
};
Ninja.prototype.swingSword = function() { return false; };
var my_ninja = new Ninja();
alert(my_ninja.swingSword());
上面的例子會提醒「真」,根據ejohn.org網站的例子,說明這是有道理的,但隨後這個作品也完全矛盾根據上面的代碼,我認爲是不可能的:
var _send = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function(){
alert("Overridden!");
_send.apply(this, arguments);
};
兩者如何都能成立?一個準確地不被覆蓋,另一個是?據我所知,它們都是對象,並且swingSword
和send
函數都是函數?那麼我們如何覆蓋XMLHttpRequest
的send
函數,而不是Ninja
的swingSword
函數呢?
預先感謝您的任何見解和幫助!
哦,我明白了!所以在XHR構造函數中沒有創建'send'函數!一切都變得更有意義了,謝謝!那麼接下來是一個小的分拆問題,那麼如何知道可用的函數是否是構造函數創建的或以其他方式創建的呢? –
@ChrisKempen好問題!幸運的是,它有一個簡單的答案:使用['hasOwnProperty'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty)。 – tne
啊啊,謝謝!我的頭痛終於消散了! +1 –