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前端实现分页代码
Jun 21 Javascript
Javascript 6里的4个新语法
Aug 25 Javascript
学习JavaScript图片预加载模块
Nov 07 Javascript
详解vue-resource promise兼容性问题
Jun 20 Javascript
vue.js实现条件渲染的实例代码
Jun 22 Javascript
微信小程序之电影影评小程序制作代码
Aug 03 Javascript
vue封装第三方插件并发布到npm的方法
Sep 25 Javascript
vue.js 实现评价五角星组件的实例代码
Aug 13 Javascript
解析JS在获取当前月的最后一天遇到的坑
Aug 30 Javascript
webpack HappyPack实战详解
Oct 08 Javascript
vue页面加载时的进度条功能(实例代码)
Jan 13 Javascript
vue项目中播放rtmp视频文件流的方法
Sep 17 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
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
2010/04/28 PHP
PHP生成数组再传给js的方法
2014/08/07 PHP
ThinkPHP中session函数详解
2016/09/14 PHP
PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例
2019/06/17 PHP
Javascript中正则表达式的全局匹配模式分析
2011/04/26 Javascript
JQuery中对服务器控件 DropdownList, RadioButtonList, CheckboxList的操作总结
2011/06/28 Javascript
javascript获取xml节点的最大值(实现代码)
2013/12/11 Javascript
javascript操作table(insertRow,deleteRow,insertCell,deleteCell方法详解)
2013/12/16 Javascript
页面实时更新时间的JS实例代码
2013/12/18 Javascript
fckeditor粘贴Word时弹出窗口取消的方法
2014/10/30 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗
2016/06/30 Javascript
AngularJS基础 ng-submit 指令简单示例
2016/08/03 Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
2016/09/05 Javascript
jquery select2的使用心得(推荐)
2016/12/04 Javascript
webpack 插件html-webpack-plugin的具体使用
2018/04/09 Javascript
如何通过setTimeout理解JS运行机制详解
2019/03/23 Javascript
小程序中的箭头函数的具体使用
2020/06/19 Javascript
Python 开发Activex组件方法
2009/11/08 Python
python使用cookie库操保存cookie详解
2014/03/03 Python
Python生成随机MAC地址
2015/03/10 Python
pandas读取csv文件,分隔符参数sep的实例
2018/12/12 Python
详解DeBug Python神级工具PySnooper
2019/07/03 Python
numpy 返回函数的上三角矩阵实例
2019/11/25 Python
selenium3.0+python之环境搭建的方法步骤
2021/02/01 Python
利用Node实现HTML5离线存储的方法
2020/10/16 HTML / CSS
Big Green Smile德国网上商店:提供各种天然产品
2018/05/23 全球购物
递归计算如下递归函数的值(斐波拉契)
2012/02/04 面试题
Shell脚本如何向终端输出信息
2014/04/25 面试题
博士生导师推荐信
2014/07/08 职场文书
同志主要表现材料
2014/08/21 职场文书
民事答辩状格式范文
2015/05/21 职场文书
win10+anaconda安装yolov5的方法及问题解决方案
2021/04/29 Python
MySQL主从搭建(多主一从)的实现思路与步骤
2021/05/13 MySQL
ES6 解构赋值的原理及运用
2021/05/25 Javascript
Python机器学习之基于Pytorch实现猫狗分类
2021/06/08 Python