【发布时间】:2015-08-29 14:39:12
【问题描述】:
如果我创建一个基本对象并在其中声明一个函数,然后使用它的原型属性覆盖原始函数定义 - 没有任何反应。原始函数定义保持不变。我想要一位经验更丰富的 JavaScript 开发人员来解释为什么这不起作用。我似乎无法通过 Google 搜索找到正确的信息。
这是我测试这个假设的代码。
//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();
【问题讨论】:
-
Apple中的getInfo()将在构造函数运行时声明,因此您不会用原型覆盖它 -
所以我必须修改我创建的实例上的原型(在本例中为变量 'a' )才能覆盖该函数?然后,如果我希望其他对象具有相同的覆盖,我必须根据“a”而不是“Apple”来创建??
-
当一个属性被访问时,查找它的过程从对象本身开始,并且只有在对象上没有找到该属性时才会查询原型链。
标签: javascript oop inheritance