yishuixs 2015-08-21 16:43 采纳率: 50%
浏览 1509
已采纳

关于javascript构造函数的一些问题

如下一个构造函数:

 function Box(name, age){
     this.name = name;
     this.age = age;
     this.method = function(){
            return 'hello';
        };
 }

 var box = new Box('programmer', 25);

1、Box是什么?是对象还是对象引用?
2、如果使用prototype给Box继续添加属性如:

 Box.prototype.country = 'China';
 Box.prototype.race = 'Han';

那么,这些行为的执行是在实例化构造函数之前,还是之后?或者说,不管是否实例化,这些代码会自动在后台自动执行?

3、能否形象地解释一些,原型对象的理解?比如根据构造函数Box,实例化了一个对象box,那么box的原型是什么?这个原型是什么,存储在哪里,运行机制是什么?

谢谢!

  • 写回答

3条回答 默认 最新

  • tsinggao 2015-08-22 00:46
    关注

    1、Box()是JS函数,JS函数是JS的一种对象,Box是指向对象的指针。
    2、使用prototype给Box()函数添加原型属性,原型属性跟实例属性是完全不同的内容,设置原型属性的目的是为了将同一对象不同实例的公有方法和属性封装起来,以节省内存空间。因此,这些行为的执行在实例化构造函数之前,或者说,不管是否实例化,这些代码都会在后台执行。
    3、原型的目的就是为了在实例化同一对象不同时节省内存空间,如果box1、box2的country和race都是一样的,就没必要将这两个属性放在实例化构造函数中进行实例化,因为这样的话box1、box2都各自保存了一份country和race,但它们的内容都一样,这样就浪费了宝贵的系统资源(内存资源),如果实例化了一个对象box,那它的可访问的属性包含两种,一种是实例化属性,在Box构造函数中定义,另一种是原型属性,通过prototype定义,而原型如下图所示。
    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 matlab中mjs用不了
  • ¥15 Ios抖音直播的时候如何添加自定义图片在直播间!
  • ¥60 riscv-pulpino总线上挂载axi从机
  • ¥15 ssh登录页面的问题
  • ¥50 关于在matlab上对曲柄摇杆机构上一点的运动学仿真
  • ¥15 jetson nano
  • ¥15 :app:debugCompileClasspath'.
  • ¥15 windows c++内嵌qt出现数据转换问题。
  • ¥15 stm32 串口通讯过程中的问题
  • ¥20 公众号如何实现点击超链接后自动发送文字