为什么我不能在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()我有预期的结果( '这是被覆盖的函数' ),但如果我试图添加的函数已经是originalObject一部分

 var originalObject = function(){ this.fun = function(){ return 'This is the original function'; } this.someFun = function(){ // ... } } 

然后结果不是预期的,事实上new otherObj().otherFun()返回'这是原始函数'

所以, 这是将方法添加到原型并重写它的唯一方法? 最重要的是为什么我不能“覆盖”原型中的function?

在js对象中有两个直接依赖于对象的层次,直接取决于原型。 而当你调用一个属性的对象,它开始从根search,然后看分支。 你可以看到树下面的图片: 在这里输入图像说明

由于该函数已经存在于对象中,因此将被调用而不是在对象原型中查找。