gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 03:28:11 26 4
gpt4 key购买 nike

在我增强 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com