我将原型设置Array为一个实例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>
Run Code Online (Sandbox Code Playgroud)
您无法分配,Array.prototype因为prototype是只读属性Array.
所以当你写作
Array.prototype = new my();
Run Code Online (Sandbox Code Playgroud)
什么都没发生.要了解原因,请尝试
JSON.stringify(Object.getOwnPropertyDescriptor(Array, "prototype"))
Run Code Online (Sandbox Code Playgroud)
结果是
"{"value":[],"writable":false,"enumerable":false,"configurable":false}"
Run Code Online (Sandbox Code Playgroud)
除非您处于严格模式,否则分配将无效.
这就是原因 - 并且看看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);
Run Code Online (Sandbox Code Playgroud)
你得到
undefinedbb
Run Code Online (Sandbox Code Playgroud)
这些bb作品是因为您在创建和设置属性时已分配到实际 .Array.prototypebb
Array.prototype恕我直言,这是一件不容易被打击的好事.:)
| 归档时间: |
|
| 查看次数: |
2221 次 |
| 最近记录: |