arr2 var出来的一个数组。
我想尝试通过arr2这个数组的实例来改变Array的原型对象。 为什么不行呢?
引用类型的变量,传递的值只是变量的地址。所以你并没有修改Array.protoype
的地址,只是把arr2.__proto__
指向了一个新的空对象而已。就像上面的结果一样,arr2.__proto__
变了,_proto
也没变,即使_proto
定义时是指向arr2.__proto__
的
题主需要知道 : 基本类型和引用类型这2个概念, __proto__是arr2的一个属性 , 它保存的只是一个指向ECMAScript的提供的全局构造函数Array的原型对象 , prototype也只是Array的一个属性 , 它保存的也是一个相同的指针 , 指针都被保存在栈内存中 , 对指针的操作并不会影响到保存在堆内存中的实际对象值(也就是Array的原型对象) , 而且Array.prototype是ECMAScript内置的 , 相似的还有Object,Function等等 你只能通过该属性对其指向的原型对象进行扩展 , 而不能对这个属性进行更改.
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
你这里的arr2是一个数组实例吧,数组实例的__proto__指向Array.prototype没错,你之后将arr2的__proto__指向一个空对象,可这跟Array的prototype没关系啊……