今天看到一个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