我知道这个问题可能在其他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 –