gpt4 book ai didi

Javascript - 定义属性与原型(prototype)

转载 作者:行者123 更新时间:2023-11-30 06:26:56 24 4
gpt4 key购买 nike

我在尝试为模拟 .net (linq) 中可用功能的函数创建数组原型(prototype)时遇到了一个意想不到的问题,该函数名为 SingleOrDefault()。

虽然原型(prototype)函数工作正常,但我发现当使用以下语法遍历普通数组时 for (var x in y)... 我的函数名称显示为属性之一,打破我的逻辑。

经过一些谷歌搜索,我重新定义了函数(如下)。

我的问题是,Current block 中的代码是否是扩展 Array 对象而不会导致任何不良副作用的正确方法?

上一个

Array.prototype.singleOrDefault = function (predicate) {
var items = applyPredicate(this, predicate);
if (items.length > 1) {
throw new Error(errorOutput.multipleElements);
}
return (items) ? items[0] : null;
};

当前

Object.defineProperty(Array.prototype, 'singleOrDefault', {
value: function (predicate) {
var items = applyPredicate(this, predicate);
if (items.length > 1) {
throw new Error(errorOutput.multipleElements);
}
return (items) ? items[0] : null;
},
enumerable: false
});

最佳答案

是的,您的“当前”代码是正确的,不像以前的代码那样受旧浏览器支持,如果您需要 ie6/7 支持,这是一个缺点(请参阅 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty)。

您可以将 object.hasOwnProperty 方法与“先前”代码一起使用,以在迭代时实现相同的效果:

for (var x in y) {
if (y.hasOwnProperty(y[x])) {
//would filter out SingleOrDefault in your examples above
}
}

关于Javascript - 定义属性与原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20518389/

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