javascript - 添加到 JavaScript 对象类的方法在遍历给定对象时出现

标签 javascript json node.js webstorm

在我增强 JavaScript 能力的过程中,我接受了添加方法的挑战,myMethod() ,到可以在给定对象上调用的 JavaScript 对象类,myObject ,以便操纵其内容。

我已经添加了 myMethod()到对象原型(prototype)并遍历myObject通过myObject.myMethod() ;但是,我遇到了一个奇怪的问题:在给定对象的末尾, myMethod()打印为值 myObject尽管据我所知,不应该如此。

Object.prototype.myMethod = function()
{
    for (var key in this)
    {
        console.log(this[key]);
    }
}


function processData(input)
{
    //Enter your code here
    var myObject = JSON.parse("{ \"myParam\": \"myValue\", \"anotherParam\": 123 }");
    myObject.myMethod();
}

以下是此代码的输出:

myValue
123
[Function]

改变myObject[key]myObject[key].toString()有以下输出:

myValue
123
function ()
{
    for (var key in this)
    {
        console.log(this[key].toString());
    }
}

我正在使用 Node.js 运行时在 WebStorm 中执行此脚本。

本次挑战的要求仅需要 myObject 的内容,我不知道如何停止myMethod()从出现在这里。我有什么遗漏的吗?

最佳答案

In my journey to become stronger in JavaScript, I have taken up a challenge to add a method, myMethod(), to the JavaScript Object class that can be called on a given Object, myObject, in order to manipulate its contents.

请注意,这种做法会被严重反对(在 2017 年,可能超出了绝对必要的程度*)。扩展任何内置原型(prototype)都有点令人担忧,但扩展 Object.prototype 特别有问题,因为当然,几乎所有对象都继承自它。

但是,如果您要扩展原型(prototype),则通过 Object.defineProperty 添加不可枚举属性非常重要或类似:

Object.defineProperty(Object.prototype, "myMethod", {
    value: function() { /* ... */ }
});

enumerable的默认值为false,因此它不会出现在for-in循环中,Object.keys 数组等

<小时/>

* “不要扩展内置原型(prototype)”的口号在 ES5 引入定义不可枚举属性的方法(例如 defineProperty)之前就开始了。现在我们可以定义不可枚举的属性,主要关注的是脚本间冲突,每个脚本都尝试对某些内容使用相同的名称,或者与添加到 JavaScript 中的新功能发生冲突。

关于javascript - 添加到 JavaScript 对象类的方法在遍历给定对象时出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44680790/

相关文章:

c# - View Model 的序列化和反序列化

node.js - "Hello world"从 Chrome 而非 curl 测量时,Rust 网络服务器比 Node 慢

eclipse - toggleBreakpointsTargetFactory 指定的 id 已注册

javascript - 每个选项卡的 AngularJS 唯一选项卡数据

javascript - 输入 Onclick 按钮 功能

javascript - Highcharts X 轴新值

node.js - 如何使用 Node 运行后端服务器?

javascript - 滚动到文档顶部时如何制作透明导航栏

javascript - 模态打开时如何发送参数json数组?

sql - 如何在 postgres 中使用 jsonb 列进行 groupBy 来模拟 EAV 计数表?