发布于 2016-09-26 05:34:53 | 191 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的Javascript教程,程序狗速度看过来!

JavaScript客户端脚本语言

Javascript 是一种由Netscape的LiveScript发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如Perl,遗留的速度问题,为客户提供更流畅的浏览效果。


前天去面试遇到的一道题,面试的问题大概是当test.increase被调用时,test和test2的count值分别是多少
 
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还是一个很好玩的语言。



最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务