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实现多级下拉菜单的实例代码
Oct 02 Javascript
javascritp添加url参数将参数加入到url中
Sep 25 Javascript
JavaScript代码复用模式详解
Nov 07 Javascript
jQuery实现首页顶部可伸缩广告特效代码
Apr 15 Javascript
快速学习jQuery插件 Cookie插件使用方法
Dec 01 Javascript
js中遍历Map对象的方法
Jul 27 Javascript
AngularJS实现标签页的两种方式
Sep 05 Javascript
js 简易版滚动条实例(适用于移动端H5开发)
Jun 26 Javascript
json2.js 入门教程之使用方法与实例分析
Sep 14 Javascript
vue-cli中vue本地实现跨域调试接口
Jan 16 Javascript
Vue 实现对quill-editor组件中的工具栏添加title
Aug 03 Javascript
关于JavaScript轮播图的实现
Nov 20 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+mysql写的简单留言本实例代码
2008/07/25 PHP
PHP下对数组进行排序的函数
2010/08/08 PHP
PHP实现的下载远程图片自定义函数分享
2015/01/28 PHP
php简单判断两个字符串是否相等的方法
2015/07/13 PHP
laravel migrate初学常见错误的解决方法
2017/10/11 PHP
php实现session共享的实例方法
2019/09/19 PHP
php实现图片压缩处理
2020/09/09 PHP
jquery处理json数据实例分析
2014/06/03 Javascript
jQuery中trigger()方法用法实例
2015/01/19 Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
2016/12/14 Javascript
Javascript循环删除数组中元素的几种方法示例
2017/05/18 Javascript
jQuery实现倒计时功能 jQuery实现计时器功能
2017/09/19 jQuery
JS控制鼠标拒绝点击某一按钮的实例
2017/12/29 Javascript
详解ES6语法之可迭代协议和迭代器协议
2018/01/13 Javascript
Material(包括Material Icon)在Angular2中的使用详解
2018/02/11 Javascript
javascript设计模式 ? 中介者模式原理与用法实例分析
2020/04/20 Javascript
解决antd 下拉框 input [defaultValue] 的值的问题
2020/10/31 Javascript
vue 判断页面是首次进入还是再次刷新的实例
2020/11/05 Javascript
[01:05:32]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第一局
2016/03/04 DOTA
Python实现的爬虫功能代码
2017/06/24 Python
Python生成器定义与简单用法实例分析
2018/04/30 Python
pycharm设置注释颜色的方法
2018/05/23 Python
python使用插值法画出平滑曲线
2018/12/15 Python
pyQt5实时刷新界面的示例
2019/06/25 Python
python实现控制COM口的示例
2019/07/03 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
2020/03/05 Python
Python运行提示缺少模块问题解决方案
2020/04/02 Python
Python迭代器协议及for循环工作机制详解
2020/07/14 Python
CSS3哪些新特性值得称赞
2016/03/02 HTML / CSS
加拿大便宜的隐形眼镜商店:Clearly
2016/09/15 全球购物
Sasa莎莎海外旗舰店:香港莎莎美妆平台
2018/03/21 全球购物
Europcar德国:全球汽车租赁领域的领导者
2018/08/15 全球购物
亲戚结婚的请假条
2014/02/11 职场文书
兼职安全员岗位职责
2015/02/15 职场文书
星际争霸:毕姥爷vs解冻03
2022/04/01 星际争霸
nginx lua 操作 mysql
2022/05/15 Servers