zl程序教程

您现在的位置是:首页 >  前端

当前栏目

Javascript面试题随笔

2023-06-13 09:14:27 时间
复制代码代码如下:

varFundamental={count:1};
functionTest(){}
Test.prototype=Fundamental;
Test.prototype.increase=function(){this.count++;};
vartest=newTest();
console.log(test.count);
vartest2=newTest();
console.log(test2.count);
test.increase();
//test.count和test2.count的值各是多少

前天去面试遇到的一道题,面试的问题大概是当test.increase被调用时,test和test2的count值分别是多少
首先,回答这道题有可能把这种情况与另一种类似的情况相混淆:
假如把代码改成:
复制代码代码如下:

functionFundamentalModified(){
varcount=1;
this.increase=function(){
count++;
}
this.show=function(){
returncount;
}
}
functionTestModified(){}
TestModified.prototype=newFundamentalModified();
vartest3=newTestModified();
vartest4=newTestModified();
test3.increase();
//test3.show()和test4.show()各是多少

假如问题改成这样,那就简单的多了。但是两个问题并不会得到相同的结果。
==========================================分割一下
回到面试题中,其实面试题的答案是2和1。原因呢:test.count是test的属性,而且test2.count其实是test2.__proto__的属性:

当test.increase()被调用时,JS执行了this.count++==>返回this.count;this.count=this.count+1;

this.count=this.count+1;

这句在看似简单的语句其实有着不同寻常的意味~~

这句话的意思其实是,给实例新建一个属性,这个属性被赋予this.count+1的值。

this.count其实是在原型链中的count,也就是这个this.count++其实在第一次执行的时候表现为:

this.count=Test.Prototype.count+1;

可以用hasOwnProperty来验证一下:

当vartest=newTest()时。test.hasOwnProperty("count") ===false
test.increase()后。test.hasOwnProperty("count") ===true
总的来说,JS还是一个很好玩的语言。