为什么在原型中添加一个函数不能覆盖JavaScript中原来的函数定义?
Why does adding a function to prototype NOT over-ride original function definition in JavaScript?
如果我创建一个基本对象并在其内部声明一个函数,然后稍后使用它的prototype属性来覆盖原始函数定义-什么都不会发生。原始函数定义保持不变。我希望有一个经验丰富的JavaScript开发人员来解释为什么这不起作用。我好像在谷歌上找不到合适的信息。
下面是测试这个假设的代码。
//Object definition
function Apple(type) {
this.color = "red";
this.getInfo = function() {
console.log("Called getInfo() from inside Apple - original");
}
}
//over write getInfo() -- dosn't work
Apple.prototype.getInfo = function() {
console.log("Apple getInfo called - prototype override");
};
a = new Apple();
a.getInfo();
因为当您调用new Apple()
时,则会调用构造函数中的原始this.getInfo = function
,覆盖您在原型上指定的内容。
这就是原型的工作原理。原型方法不会"覆盖"实例变量——相反,只有在对象自己的属性中查找失败时才会参考原型链。(即。如果对象没有特定的属性,则对对象的原型进行检查,依此类推,沿着原型链向上传播,直到找到第一个匹配。
在这种情况下,getInfo
存在于a
上,因此不需要在原型链上进行查找。
正好相反。在实例本身上创建的方法(在构造函数中)会覆盖从原型对象继承的方法。注意,它们在源代码中出现的顺序与此无关。
相关文章:
- 覆盖函数中的函数
- javascript函数将数据添加到屏幕,但随后被另一个函数覆盖
- Javascript重新定义和覆盖现有的函数体
- 如何在javascript中覆盖函数的行为
- 覆盖Jquery's函数
- 如何在Extjs中覆盖lovcombo中的函数
- 如何覆盖Backbone's解析函数
- 如何通过 JQuery ajaxSend 事件覆盖成功函数
- 覆盖主干的解析函数
- 覆盖上下文.属性和函数
- 有没有办法覆盖 setTimeout 函数,使其使用微秒而不是毫秒
- 被覆盖的 setTimeout 变量中的函数
- 为什么某些原型函数覆盖有效而其他函数无效
- JavaScript - 使用包含异步回调但仍返回原始值的函数覆盖函数
- 带有knockout.js函数覆盖的Javascript
- Javascript函数覆盖原型
- 函数覆盖类,而不是添加新的
- 是否可以用自定义函数覆盖window.location函数
- javascript函数覆盖
- 有没有办法使用 jsp 中包含的 js 文件中的函数覆盖 jsp 中存在的 js 函数