在声明复杂类型的变量(如函数)时,我们可以通过构造函数的方式进行声明。
如:声明一个函数
var foo = new Function("console.log('i am a function')");
或者通过构造函数的方式新建一些组件时
function F(name){
this.name = name;
}
var f1 = new F('Couzin')
我们可能知道,这样创造的实例 f1._proto_ = F.prototype ,这样的结果是通过 new 操作符实现的。
那么,在 new 的过程中发生了什么?
实际上就分为简单的三个步骤:
- var f1 = {};//创建实例
- f1._proto_ = F.prototype;//创建实例
- F.call(f1);//初始化实例
所以函数 F 中的 this 是实例 f1 的实例变量,只能在 f1 中访问到。
- F.call(f1);//初始化实例