js 原型问题

clipboard.png
arr2 var出来的一个数组。
我想尝试通过arr2这个数组的实例来改变Array的原型对象。 为什么不行呢?

阅读 2.6k
4 个回答

你这里的arr2是一个数组实例吧,数组实例的__proto__指向Array.prototype没错,你之后将arr2的__proto__指向一个空对象,可这跟Array的prototype没关系啊……

clipboard.png

引用类型的变量,传递的值只是变量的地址。所以你并没有修改Array.protoype的地址,只是把arr2.__proto__指向了一个新的空对象而已。就像上面的结果一样,arr2.__proto__变了,_proto也没变,即使_proto定义时是指向arr2.__proto__

因为你改只是arr2的原型的引用地址,而不是修改的数组Array的原型

题主需要知道 : 基本类型和引用类型这2个概念, __proto__是arr2的一个属性 , 它保存的只是一个指向ECMAScript的提供的全局构造函数Array的原型对象 , prototype也只是Array的一个属性 , 它保存的也是一个相同的指针 , 指针都被保存在栈内存中 , 对指针的操作并不会影响到保存在堆内存中的实际对象值(也就是Array的原型对象) , 而且Array.prototype是ECMAScript内置的 , 相似的还有Object,Function等等 你只能通过该属性对其指向的原型对象进行扩展 , 而不能对这个属性进行更改.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题