内部原理
- (0) 一个构造函数
构造函数在被调用时, 必须在前面加 new 关键字
function Person (para)
{
this.name = "xxx";
this.action = function (){
//TODO...
}
this.gender = para;
}
- (1) 首先在函数体顶端隐式的加上一个空对象
this = {}
实际上, 这一步隐式生成的对象并非空对象, 而是对象体会带有属性__proto__
,
这个属性用来指向构造函数的原型
var this = {
__proto__: obj.prototype; //指向构造函数的原型
}
- (2) 然后将函数体内的 this 对象转化为隐式对象的 this
即把生成的隐式对象在函数体内进行赋予属性和方法
这一步就开始给生成的隐式对象进行赋予属性
执行this.xxx = xxx, 给隐式对象赋予构造函数内定义的属性
var this = {
__proto__: obj.prototype; //指向构造函数的原型
name: "xxx";
action: function (){
//TODO...
}
gender: para;
}
-
(3) 最终在函数体结束的时候, 隐式生成返回
在函数末端, 进行 return this 这一步操作,
然后将这个隐式对象返回到外部 -
整个过程相当于以下的过程
function Person (para)
{
1. 首先函数体最前面隐式生成一个对象this
对象会带有__proto__属性用以指向构造函数的原型
var this = {
__proto__: obj.prototype;
}
3. 这里就会把函数体内部的this转化为隐式对象,
下面就相当于给隐式对象this增加新属性和新方法
this.name = "xxx";
this.action = function (){
//TODO...
}
this.gender = para;
4. 最终赋完值后, 函数体结束的时候返回整个隐式对象this
return this;
}
- 备注
使用 new 关键字后, 返回值必须是对象类型, 否则无效