gpt4 book ai didi

javascript - 在 NodeList 对象的 Object.prototype 上实现 Array 方法是一个好习惯吗?

转载 作者:行者123 更新时间:2023-12-02 19:44:08 28 4
gpt4 key购买 nike

为了在 NodeList 对象(类似 Array)上执行数组方法,我们每次都需要间接调用 Array.prototype。

我们可以做点什么让 node_list.slice(0,1) 成为可能吗?

由于 NodeList 继承了 Object.prototype 的方法,我的实现如下并有效完美 node_list.slice(0,1)

Object.prototype.slice = function(a,b){ return Array.prototype.slice.call(this,a,b);}

在 Object.prototype 上实现切片有什么缺点吗?

调用 Array.prototype 的传统方法:

node_list
[<li>​ test_list1 ​</li>​, <li>​ test_list2 ​</li>​]

Object.prototype.toString.call(node_list)
"[object NodeList]"

var content = Array.prototype.slice.call(node_list,0,1)

content
[<li>​ test_list1 ​</li>​]

Object.prototype.toString.call(content)
"[object Array]"

最佳答案

由于这个原因,扩展对象的原型(prototype)是一个坏主意。
即使您想扩展内置原型(prototype),也可以将扩展减少到必要的部分:

HTMLCollection
NodeList

不出现在 for(.. in ..) 循环中的原型(prototype)方法可以定义如下:

var slicer = { value: Array.prototype.slice };
Object.defineProperty(HTMLCollection.prototype, 'slice', slicer);
Object.defineProperty(NodeList.prototype, 'slice', slicer);

另请参阅:

最短方法(不扩展原型(prototype))

// Equivalent to the question's code
[].slice.apply(node_list,0,1)
// A method to turn a node_list/HTMLCollection in an array (for later use?)
[].slice.call(node_list);

关于javascript - 在 NodeList 对象的 Object.prototype 上实现 Array 方法是一个好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10064117/

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