gpt4 book ai didi

javascript - 为什么我不能覆盖 `Array` (`Array.prototype` 的原型(prototype))?

转载 作者:数据小太阳 更新时间:2023-10-29 06:07:35 24 4
gpt4 key购买 nike

我把Array的原型(prototype)设置为my的实例,我想book.aa会显示"aa",却显示"undefined",为什么?谢谢!

   <html>
<head>
<title>Array Properties</title>
<h2>Array Properties</h2>
<script type="text/javascript">
function my() {
this.aa = 'aa';
}
Array.prototype = new my();
Array.prototype.bb = "bb";
var book = new Array();
book[0] = "War and Peace";

</script>
</head>
<body bgcolor="lightblue">
<script type="text/javascript">
document.write(book.aa+book.bb);
</script>
</body>

</html>

最佳答案

您不能分配给 Array.prototype,因为 prototypeArray 的只读属性。

所以当你写

Array.prototype = new my();

没有任何反应。要了解原因,请尝试

JSON.stringify(Object.getOwnPropertyDescriptor(Array, "prototype"))

结果是

"{"value":[],"writable":false,"enumerable":false,"configurable":false}"

除非您处于严格模式,否则分配会默默地失败。

这就是为什么 - 请参阅 http://jsfiddle.net/5Ysub/ -- 如果你执行

function my() {
this.aa = 'aa';
}
Array.prototype = new my();
Array.prototype.bb = "bb";
var book = new Array();
book[0] = "War and Peace";
document.write(book.aa+book.bb);

你得到

undefinedbb

bb 之所以有效,是因为您在创建和设置 bb 时分配给了 real Array.prototype > 属性(property)。

恕我直言,Array.prototype 无法破解是件好事。 :)

关于javascript - 为什么我不能覆盖 `Array` (`Array.prototype` 的原型(prototype))?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12811299/

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