javascript - 为什么我不能 "overwrite"javascript 中的方法?

标签 javascript node.js overriding

我想通过将它添加到原型(prototype)来覆盖 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() 返回 'This is the original function' .

所以,是 this将方法添加到原型(prototype)并覆盖它的唯一方法是什么?最重要的是,为什么我不能“覆盖”原型(prototype)中的函数?

最佳答案

在js对象中有两个层次,直接依赖对象和直接依赖原型(prototype)。当您调用对象中的属性时,它会从根开始搜索,然后在分支中查找。你可以看到下面的树: enter image description here

关于javascript - 为什么我不能 "overwrite"javascript 中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29945447/

相关文章:

JavaScript 对象难题

node.js - 为什么最新的 Angular CLI 有损坏的包?

java - 在 java 中重写父类(super class)的父类(super class)中的方法?

php - 覆盖默认的php函数

javascript - 为什么我会收到 TypeError : this. getToken is not a function - React JS

javascript - 不可见的 ReCaptcha 不调用回调

javascript - 我如何解决 net::ERR_ABORTED 404 (Not Found) 在 View 中,错误不让显示 css Laravel 6.0?

javascript - RethinkDB:​​通过键值对获取文档?

node.js - Nodejs不保留请求 header 的大写

C# 审核覆盖 SaveChanges() 方法。如何从表中找出实体的外键及其值