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 相关文章推荐
prototype class详解
Sep 07 Javascript
『jQuery』取指定url格式及分割函数应用
Apr 22 Javascript
javascript实现手机震动API代码
Aug 05 Javascript
javascript实现消灭星星小游戏简单版
Nov 15 Javascript
使用vue.js实现联动效果的示例代码
Jan 10 Javascript
jQuery弹出层插件popShow用法示例
Jan 23 Javascript
Angularjs中数据绑定的实例详解
Aug 25 Javascript
vue-cli 3.x 修改dist路径的方法
Sep 19 Javascript
vue插件draggable实现拖拽移动图片顺序
Dec 01 Javascript
Mint UI实现A-Z字母排序的城市选择列表
Dec 28 Javascript
详解Webpack抽离第三方类库以及common解决方案
Mar 30 Javascript
vscode中使用npm安装babel的方法
Aug 02 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判断变量类型常用方法
2012/04/24 PHP
推荐25款php中非常有用的类库
2014/09/29 PHP
PHP多维数组排序array详解
2017/11/21 PHP
PHP实现的DES加密解密类定义与用法示例
2020/11/02 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
2018/08/20 PHP
dess中一个简单的多路委托的实现
2010/07/20 Javascript
父节点获取子节点的字符串示例代码
2014/02/26 Javascript
文本域光标操作的jQuery扩展分享
2014/03/10 Javascript
Jquery实现自定义弹窗示例
2014/03/12 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
2014/05/04 Javascript
java、javascript实现附件下载示例
2014/08/14 Javascript
JavaScript实现简单Tip提示框效果
2016/04/20 Javascript
HTML5 canvas 9绘制图片实例详解
2016/09/06 Javascript
微信小程序 生命周期详解
2016/10/12 Javascript
Bootstrap table的使用方法
2016/11/02 Javascript
详解AngularJS中$filter过滤器使用(自定义过滤器)
2017/02/04 Javascript
JS实现电话号码的字母组合算法示例
2019/02/26 Javascript
基于vue如何发布一个npm包的方法步骤
2019/05/15 Javascript
小程序如何支持使用 async/await详解
2019/09/12 Javascript
基于PHP pthreads实现多线程代码实例
2020/06/24 Javascript
解决vue的touchStart事件及click事件冲突问题
2020/07/21 Javascript
python pickle 和 shelve模块的用法
2013/09/16 Python
Python实现字符串格式化的方法小结
2017/02/20 Python
python切片的步进、添加、连接简单操作示例
2019/07/11 Python
pip install 使用国内镜像的方法示例
2020/04/03 Python
日本酒店、民宿、温泉旅馆、当地旅行团中文预订:e路东瀛
2019/12/09 全球购物
小型女装店的创业计划书
2014/01/09 职场文书
探矿工程师自荐信
2014/01/24 职场文书
财务总监管理岗位职责
2014/03/08 职场文书
党员群众路线承诺书
2014/05/20 职场文书
查摆问题对照检查材料
2014/08/28 职场文书
2015毕业寄语大全
2015/02/26 职场文书
关于环保的广播稿
2015/12/17 职场文书
2016七夕情人节广告语
2016/01/28 职场文书
分析MySQL抛出异常的几种常见解决方式
2021/05/18 MySQL
eval(cmd)与eval($cmd)的区别与联系
2021/07/07 PHP