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 css+html实现简单的日历
Jul 14 Javascript
jQuery中页面返回顶部的方法总结
Dec 30 Javascript
移动端界面的适配
Jan 11 Javascript
微信小程序 WebSocket详解及应用
Jan 21 Javascript
JavaScript提高加载和执行效率的方法
Feb 03 Javascript
用vue的双向绑定简单实现一个todo-list的示例代码
Aug 03 Javascript
jQuery实现base64前台加密解密功能详解
Aug 29 jQuery
使用express搭建一个简单的查询服务器的方法
Feb 09 Javascript
简单了解node npm cnpm的具体使用方法
Feb 27 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
Aug 12 Javascript
封装Vue Element的table表格组件的示例详解
Aug 19 Javascript
教你部署vue项目到docker
Apr 05 Vue.js
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编程中字符串处理的5个技巧小结
2007/11/13 PHP
PHP多线程抓取网页实现代码
2010/07/22 PHP
php站内搜索关键词变亮的实现方法
2014/12/30 PHP
PHP序列化操作方法分析
2016/09/28 PHP
PHP防止图片盗用(盗链)的方法小结
2016/11/11 PHP
PHP实现chrome表单请求数据转换为接口使用的json数据
2021/03/04 PHP
XP折叠菜单&仿QQ2006菜单
2006/12/16 Javascript
javascript实现信息增删改查的方法
2015/07/25 Javascript
jquery实现超简洁的TAB选项卡效果代码
2015/08/28 Javascript
如何实现移动端浏览器不显示 pc 端的广告
2015/10/15 Javascript
js判断日期时间有效性的方法
2015/10/24 Javascript
详解JavaScript中的Unescape()和String() 函数
2015/11/09 Javascript
怎么限制input的text里输入的值只能是数字(正则、js)
2016/05/16 Javascript
深入理解Ajax的get和post请求
2016/06/02 Javascript
js内置对象处理_打印学生成绩单的简单实现
2016/09/24 Javascript
JS验证图片格式和大小并预览的简单实例
2016/10/11 Javascript
jQuery图片轮播实现并封装(一)
2016/12/03 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
2020/03/07 Javascript
Python简单获取自身外网IP的方法
2016/09/18 Python
使用Python将数组的元素导出到变量中(unpacking)
2016/10/27 Python
[原创]教女朋友学Python(一)运行环境搭建
2017/11/29 Python
python实现多线程行情抓取工具的方法
2018/02/28 Python
深入理解Django的中间件middleware
2018/03/14 Python
浅谈PYTHON 关于文件的操作
2019/03/19 Python
windows10下安装TensorFlow Object Detection API的步骤
2019/06/13 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
2019/10/11 Python
CSS3过渡transition效果实例介绍
2016/05/03 HTML / CSS
Html5监听手机摇一摇事件的实现
2019/11/07 HTML / CSS
印度排名第一的蛋糕、鲜花和礼品送货:Winni
2019/08/02 全球购物
工业设计专业推荐信
2013/10/29 职场文书
采购部长岗位职责
2014/06/13 职场文书
名人演讲稿范文
2014/09/16 职场文书
2015年班长个人工作总结
2015/04/03 职场文书
表扬稿表扬信的格式及范文
2019/06/24 职场文书
vue3使用vue-router的完整步骤记录
2021/06/20 Vue.js
Oracle安装TNS_ADMIN环境变量设置参考
2021/11/01 Oracle