为什么我不能 "overwrite" javascript 中的方法?
why I can't "overwrite" a method in javascript?
我想通过将一个 JS 对象的函数添加到它的原型来覆盖它。
var originalObject = function(){
this.someFun = function(){
// ...
}
}
var otherObj = function(){
this.otherFun = function(){
originalObject.prototype.fun = function(){
return 'This is the overwritten function.';
}
var o = new originalObject();
return o.fun()
}
}
这样当我执行new otherObj().otherFun()
时,我得到了预期的结果('This is the overwritten function.'),但是如果我要添加的功能已经是 originalObject
的一部分
var originalObject = function(){
this.fun = function(){
return 'This is the original function';
}
this.someFun = function(){
// ...
}
}
那么结果不是预期的,事实上 new otherObj().otherFun()
returns 'This is the original function' .
那么,this 是将方法添加到原型并覆盖它的唯一方法吗?最重要的是,为什么我不能 "overwrite" 原型中的函数?
在js对象中有直接依赖对象和直接依赖原型两个层次。当您调用对象中的 属性 时,它会从根开始搜索,然后在分支中查找。你可以看到下面的树:
因为对象中已经存在该函数,所以会调用它,而不是在对象原型中寻找。
我想通过将一个 JS 对象的函数添加到它的原型来覆盖它。
var originalObject = function(){
this.someFun = function(){
// ...
}
}
var otherObj = function(){
this.otherFun = function(){
originalObject.prototype.fun = function(){
return 'This is the overwritten function.';
}
var o = new originalObject();
return o.fun()
}
}
这样当我执行new otherObj().otherFun()
时,我得到了预期的结果('This is the overwritten function.'),但是如果我要添加的功能已经是 originalObject
var originalObject = function(){
this.fun = function(){
return 'This is the original function';
}
this.someFun = function(){
// ...
}
}
那么结果不是预期的,事实上 new otherObj().otherFun()
returns 'This is the original function' .
那么,this 是将方法添加到原型并覆盖它的唯一方法吗?最重要的是,为什么我不能 "overwrite" 原型中的函数?
在js对象中有直接依赖对象和直接依赖原型两个层次。当您调用对象中的 属性 时,它会从根开始搜索,然后在分支中查找。你可以看到下面的树:
因为对象中已经存在该函数,所以会调用它,而不是在对象原型中寻找。