js构造函数原型中的数组实例化奇怪的问题
为什么在构造函数里面给原型添加属性....
【js构造函数原型中的数组实例化奇怪的问题】 比起回答,我更想知道的是楼主这样写的想法?
■网友
当你通过new操作符实例化一个对象的时候,此时new操作符实际执行以下几个步骤:
1. 创建一个对象
2. 将这个空对象的__proto__属性指向构造函数的原型对象
3. 将this指针指向该对象
4. 执行构造函数内部的代码
5. 返回该对象
你在构造函数内部定义了原型属性,通过new操作符每实例化出来一个对象,就执行一次构造函数内部的代码,那么就意味着无论实例化多少个对象,它们的原型属性technologys始终是被初始化为。function Foo(){ Foo.prototype.username = \u0026#39;suoz\u0026#39;; Foo.prototype.number = ;}var obj1 = new Foo();obj1.push(\u0026#39;three\u0026#39;);alert(obj1.number);\t\t//one,two,threevar obj2 = new Foo();alert(obj2.number);\t\t//one,twoalert(obj1.number);\t\t//one,two一般创建对象都采用构造函数和原型的组合模式function Foo(username){\tthis.username = username;\tthis.number = ;}Foo.prototype.getUsername = {\treturn this.username;}var obj = new Foo(\u0026#39;suoz\u0026#39;);这样解决了原型模式创建对象的弊端(原型属性内部如果包含引用类型的值,由同一特定类型实例化出来的对象会共享该属性,其中一个对象改变该属性的值,其它对象下的该原型属性也会受到互相影响);
也解决了构造函数模式创建对象的弊端(多个实例化出来的对象的实例方法是相同的,如果创建多个对象,同时也会创建多个相同的方法)
你可能觉得这样封装性不好,你想将所有操作封装在一个构造函数内部,那么你可以使用动态原型模式创建对象function Foo(username){\tthis.username = username;\tthis.number = ;\tif(typeof this.getUsername != \u0026#39;function\u0026#39;){\t\tFoo.prototype.getUsername = function(){\t\t\treturn this.username;\t\t};\t}}var obj = new Foo(\u0026#39;suoz\u0026#39;);
■网友
醉人,你在构造函数里修改原型干嘛
推荐阅读
- |斯柯达全新晶锐原型车曝光 与Polo同平台/空间更实用
- 需求文档外包怎样报价
- C语言指数函数代码
- 单例模式static函数必须在头文件中实现么
- |幸亏还是原型车 本田第11代思域解析
- 函数|你要来试试吗?高中数学丨越做越起劲的100道高中数学函数类压轴题
- 咋用c语言或java打点出函数图
- javascript函数的调用模式有哪几种
- Python中的函数、方法,例如list的append()方法和del函数
- 函数|原来……学霸是这样将数学提升到130+(附必修1-5学习重点及高中各阶段学习重点)
