您好,欢迎访问一九零五行业门户网

Javascript 面试题随笔_javascript技巧

复制代码 代码如下:
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还是一个很好玩的语言。
其它类似信息

推荐信息