Javascript 面试题随笔
Javascript 面试题随笔
发布时间:2016-12-30 来源:查字典编辑
摘要:复制代码代码如下:varFundamental={count:1};functionTest(){}Test.prototype=Funda...

复制代码 代码如下:

var Fundamental = {count:1};

function Test(){}

Test.prototype = Fundamental;

Test.prototype.increase = function(){this.count++;};

var test = new Test();

console.log(test.count);

var test2 = new Test();

console.log(test2.count);

test.increase();

//test.count和test2.count的值各是多少

前天去面试遇到的一道题,面试的问题大概是当test.increase被调用时,test和test2的count值分别是多少

首先,回答这道题有可能把这种情况与另一种类似的情况相混淆:

假如把代码改成:

复制代码 代码如下:

function FundamentalModified(){

var count = 1;

this.increase = function(){

count++;

}

this.show = function(){

return count;

}

}

function TestModified(){}

TestModified.prototype = new FundamentalModified();

var test3 = new TestModified();

var test4 = new TestModified();

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来验证一下:

当var test = new Test()时。test.hasOwnProperty("count") === false

test.increase()后。 test.hasOwnProperty("count") === true

总的来说,JS还是一个很好玩的语言。

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类