JS 中new一个对象发生了什么事

今天看到一个360的前端面试题:

function A(){}
function B(a){
  this.a=a;
}
function C(a){
  if(a){
    this.a=a;
   }
}
A.prototype.a=1;
B.prototype.a=1;
C.prototype.a=1;
console.log(new A());
console.log(new B());
console.log(new C(2));

在没有上机测试时,想了一下,认为的结果如下:

A(){},B(){}---this.a=1,C(){}---this.a=2

实际结果如下:

A(){},B(){}---this.a=undefined,C(){}--this.a=2.

查了一下资料,大概的理解如下:

var instance=new SuperFatehr();

通过new SuperFather创造了一个实例 instance,此时在内存中开辟了一块空间,标识为instance,将在SuperFather中的属性和值复制到instance但不包括原型对象,最后将instance的_proto_属性指向SuperFather的原型对象。

下面是自己的测试例子:

function A(){
 this.value=4;
}
A.prototype.sayValue=function(){
 console.log(this.value);
};
var a=new A();
console.log(a);

//测试结果如下:

A {value: 4}

|—value: 4

|—__proto__: Object

posted @ 2016-07-06 10:44  国旗下的猫  阅读(949)  评论(0编辑  收藏  举报