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 相关文章推荐
jQuery帮助之CSS尺寸(五)outerHeight、outerWidth
Nov 14 Javascript
JS中判断null、undefined与NaN的方法
Mar 24 Javascript
解决js下referer兼容各大浏览器的方法
Nov 03 Javascript
JavaScript实现select添加option
Jul 03 Javascript
jQuery事件委托之Safari
Jul 05 Javascript
浅析如何利用angular结合translate为项目实现国际化
Dec 08 Javascript
jQuery实现动态文字搜索功能
Jan 05 Javascript
JavaScript严格模式下关于this的几种指向详解
Jul 12 Javascript
vue 怎么创建组件及组件使用方法
Jul 27 Javascript
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
Oct 26 Javascript
Vue 报错TypeError: this.$set is not a function 的解决方法
Dec 17 Javascript
Js代码中的span拼接问题解决
Nov 22 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动态生成静态HTML网页的代码
2010/03/04 PHP
php 获取一个月第一天与最后一天的代码
2010/05/16 PHP
利用谷歌 Translate API制作自己的翻译脚本
2014/06/04 PHP
php中时间函数date及常用的时间计算
2017/05/12 PHP
PHP如何将图片文件上传到另外一台服务器上
2019/08/26 PHP
跨浏览器开发经验总结(三)   警惕“IE依赖综合症”
2010/05/13 Javascript
js清除input中type等于file的值域(示例代码)
2013/12/24 Javascript
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
2014/06/10 Javascript
javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法
2015/05/13 Javascript
JavaScript中通过提示框跳转页面的方法
2016/02/14 Javascript
微信小程序图表插件(wx-charts)实例代码
2017/01/17 Javascript
vue学习笔记之vue1.0和vue2.0的区别介绍
2017/05/17 Javascript
NodeJS父进程与子进程资源共享原理与实现方法
2018/03/16 NodeJs
关于vue表单提交防双/多击的例子
2019/10/31 Javascript
VUE 实现动态给对象增加属性,并触发视图更新操作示例
2019/11/29 Javascript
vue quill editor 使用富文本添加上传音频功能
2020/01/14 Javascript
node.js中path路径模块的使用方法实例分析
2020/02/13 Javascript
python 多进程通信模块的简单实现
2014/02/20 Python
Python简单计算文件夹大小的方法
2015/07/14 Python
Python使用logging结合decorator模式实现优化日志输出的方法
2016/04/16 Python
Python的re模块正则表达式操作
2016/05/25 Python
基于python中staticmethod和classmethod的区别(详解)
2017/10/24 Python
把django中admin后台界面的英文修改为中文显示的方法
2019/07/26 Python
在脚本中单独使用django的ORM模型详解
2020/04/01 Python
CSS3 please 跨浏览器的CSS3产生器
2010/03/14 HTML / CSS
英国最大的正宗复古足球衫制造商和零售商:TOFFS
2018/06/21 全球购物
描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理
2015/03/25 面试题
幼儿园毕业寄语
2014/04/03 职场文书
社区班子个人对照检查材料思想汇报
2014/10/07 职场文书
银行贷款收入证明
2014/10/17 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话
2014/10/21 职场文书
2014年仓库管理工作总结
2014/12/17 职场文书
毕业设计论文评语
2014/12/31 职场文书
汽车4S店销售经理岗位职责
2015/04/02 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
Django如何创作一个简单的最小程序
2021/05/12 Python