Javascript 面试题随笔


Posted in Javascript onMarch 31, 2011
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 相关文章推荐
使用JS操作页面表格,元素的一些技巧
Feb 02 Javascript
JQuery操作Select的Options的Bug(IE8兼容性视图模式)
Apr 21 Javascript
单击浏览器右上角的X关闭窗口弹出提示的小例子
Jun 12 Javascript
jQuery控制iFrame(实例代码)
Nov 19 Javascript
node.js中的console.trace方法使用说明
Dec 09 Javascript
jQuery实现手机号码输入提示功能实例
Apr 30 Javascript
bootstrap学习笔记之初识bootstrap
Jun 21 Javascript
Angular ui.bootstrap.pagination分页
Jan 20 Javascript
关于ES6箭头函数中的this问题
Feb 27 Javascript
一篇文章介绍redux、react-redux、redux-saga总结
May 23 Javascript
vuex + keep-alive实现tab标签页面缓存功能
Oct 17 Javascript
微信小程序中的列表切换功能实例代码详解
Jun 09 Javascript
IE6 fixed的完美解决方案
Mar 31 #Javascript
HTML DOM的nodeType值介绍
Mar 31 #Javascript
setTimeout和setInterval的区别你真的了解吗?
Mar 31 #Javascript
Draggable Elements 元素拖拽功能实现代码
Mar 30 #Javascript
使用jQuery实现dropdownlist的联动效果(sharepoint 2007)
Mar 30 #Javascript
使用jquery为table动态添加行的实现代码
Mar 30 #Javascript
jquery 查找select ,并触发事件的实现代码
Mar 30 #Javascript
You might like
Google Voice 短信发送接口PHP开源版(2010.5更新)
2010/07/22 PHP
PHP isset()与empty()的使用区别详解
2010/08/29 PHP
深入php常用函数的使用汇总
2013/06/08 PHP
PHP的Yii框架的基本使用示例
2015/08/21 PHP
Centos6.5和Centos7 php环境搭建方法
2016/05/27 PHP
php实现文章评论系统
2019/02/18 PHP
传递参数的标准方法(jQuery.ajax)
2008/11/19 Javascript
javascript开发技术大全 第4章 直接量与字符集
2011/07/03 Javascript
页面js遇到乱码问题的解决方法是和无法转码的情况
2014/04/30 Javascript
JS中使用sort结合localeCompare实现中文排序实例
2014/07/23 Javascript
JS使用for循环遍历Table的所有单元格内容
2014/08/21 Javascript
JS实现可展开折叠层的鼠标拖曳效果
2015/10/09 Javascript
图解JavaScript中的this关键字
2020/05/28 Javascript
Angular2 多级注入器详解及实例
2016/10/30 Javascript
微信小程序基于本地缓存实现点赞功能的方法
2017/12/18 Javascript
10分钟上手vue-cli 3.0 入门介绍
2018/04/04 Javascript
微信小程序实现滴滴导航tab切换效果
2018/07/24 Javascript
layui数据表格实现重载数据表格功能(搜索功能)
2019/07/27 Javascript
JS实现贪吃蛇游戏
2019/11/15 Javascript
[01:01:35]Optic vs paiN 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[01:01:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第一场 3月4日
2021/03/11 DOTA
python中遍历文件的3个方法
2014/09/02 Python
python列表的常用操作方法小结
2016/05/21 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
Python3enumrate和range对比及示例详解
2019/07/13 Python
python的命名规则知识点总结
2019/10/04 Python
使用python绘制温度变化雷达图
2019/10/18 Python
Python vtk读取并显示dicom文件示例
2020/01/13 Python
python数据预处理 :数据共线性处理详解
2020/02/24 Python
解决python父线程关闭后子线程不关闭问题
2020/04/25 Python
速比涛英国官网:Speedo英国
2019/07/15 全球购物
品质主管的岗位职责
2013/12/04 职场文书
单方离婚协议书范本2014
2014/10/28 职场文书
团支部书记竞选稿
2015/11/21 职场文书
Python基础详解之邮件处理
2021/04/28 Python
开发者首先否认《遗弃》被取消的传言
2022/04/11 其他游戏