为什么我不能在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,然后看分支。 你可以看到树下面的图片:
由于该函数已经存在于对象中,因此将被调用而不是在对象原型中查找。