gpt4 book ai didi

javascript - 原型(prototype)中自定义函数和原生函数的区别

转载 作者:行者123 更新时间:2023-12-04 15:17:01 24 4
gpt4 key购买 nike

'For In' 可以遍历 Array(值/属性/函数)。

let arr = [1,2,3,4];
arr.__proto__.con = function(){console.log('from array');}
for(let item in arr){
console.log(item);
}


结果将是:
1,2,3,4,con

为什么不打印像'toString'/'s​​plit'这样的原生函数?
有什么区别?

在我看来,它们( contoString)都属于 Array 的原型(prototype)。

最佳答案

for...in陈述...

iterates over all non-Symbol, enumerable properties of an object. (source: MDN)



但是,如果您查看 ECMA specification ,在“数组原型(prototype)对象的属性”项中,您将看到:

The Array prototype object is the intrinsic object %ArrayPrototype%. The Array prototype object is an Array exotic objects and has the internal methods specified for such objects. It has a length property whose initial value is 0 and whose attributes are { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }.



这适用于 concat , filter , map , forEach , sort , toString ETC...

您可以使用 Object.getOwnPropertyDescriptor检查这些属性。例如:

console.log(Object.getOwnPropertyDescriptor(Array.prototype, "concat"));


最后,使用 {enumerable: false} 设置这些方法,看看 other answer .

关于javascript - 原型(prototype)中自定义函数和原生函数的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58946532/

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