我们先来看下面一段代码:
上述代码的结果如下:
根据上述说法,所对应的输出结果,就非常合理了。
对于console.log("fun === fun.prototype.constructor:", fun ===fun.prototype.constructor),程序的输出结果为:
var i = 0;
(function () {
var fun =function() {
this.member1= 1;
console.log("this:", this);
if (i == 0){
this.member2= "增加成员2";
} else{
this.member3= "增加成员3";
}
i++;
};
fun.member ="member";
var fun1 =new fun;
var fun2 =new fun;
console.log("fun:", fun);
console.log("fun1:", fun1);
console.log("fun2:", fun2);
console.log("fun === fun.prototype.constructor:", fun ===fun.prototype.constructor);
})();
上述代码的结果如下:
- 对于fun.member ="member",这个操作是对fun对象增加键值对,这个fun的对象成员,不能被当做类成员看待,所以fun1和fun2里面都没有member这个成员;
- JavaScript中的new关键字,其作用与Java中的new如出一辙,都将做如下三项基本工作:
- 在系统堆中,申请该类的所有“非静态”成员空间,即,实例空间;
- 在系统“堆栈”,申请一个指针空间(对象空间、局部变量),并将上述空间的首地址赋值给这个指针(对象),而这个指针又被另起外号为“this”;
- 对被实例化的对象的所有“非静态”赋初值,而这就是构造方法(函数)的功能;
根据上述说法,所对应的输出结果,就非常合理了。
对于console.log("fun === fun.prototype.constructor:", fun ===fun.prototype.constructor),程序的输出结果为:
说明,在js中,类都由一个constructor函数,这个函数直接指向类(函数本身)。