如下一个构造函数:
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的原型是什么?这个原型是什么,存储在哪里,运行机制是什么?
谢谢!
1、Box()是JS函数,JS函数是JS的一种对象,Box是指向对象的指针。
2、使用prototype给Box()函数添加原型属性,原型属性跟实例属性是完全不同的内容,设置原型属性的目的是为了将同一对象不同实例的公有方法和属性封装起来,以节省内存空间。因此,这些行为的执行在实例化构造函数之前,或者说,不管是否实例化,这些代码都会在后台执行。
3、原型的目的就是为了在实例化同一对象不同时节省内存空间,如果box1、box2的country和race都是一样的,就没必要将这两个属性放在实例化构造函数中进行实例化,因为这样的话box1、box2都各自保存了一份country和race,但它们的内容都一样,这样就浪费了宝贵的系统资源(内存资源),如果实例化了一个对象box,那它的可访问的属性包含两种,一种是实例化属性,在Box构造函数中定义,另一种是原型属性,通过prototype定义,而原型如下图所示。
http://blog.csdn.net/yxpjx/article/details/5109432
在JavaScript中,使用new关键字后,意味着做了如下四件事情:
创建一个新的对象,这个对象的类型是object;
设置这个新的对象的内部、可访问性和[[prototype]]属性为构造函数(指prototype.construtor所指向的构造函数)中设置的;
执行构造函数,当this关键字被提及的时候,使用新创建的对象的属性;
返回新创建的对象(除非构造方法中返回的是‘无原型’)。
图中右侧的表格的Box改为Box Prototype。