JavaScript:new 一个函数和直接调用函数的区别分析


Posted in Javascript onJuly 10, 2013
function Test() { 
this.name = 'Test'; 

return function() { return true; } 
}

var test = new Test(); // 这里的 test 是什么?

是一个 Test 对象吗?错!这里 test 是一个函数——Test 中返回的 function() { return true; }。这时,new Test() 等效于 Test(),注意,是等效于,不是等于,如果使用new Test() == Test() 判定两者是否相等,则会返回 false,因为 Javascript  对于 Object 和 Function 的比较是基于引用的。

为了更清晰的分辨在上述情形下两者间的区别,请继续看以下代码:

function Test() { 
this.name = 'Test'; 

return 'Test'; 
} 
var fnT = Test(); 
var newT = new Test();

显然,fnT 是字符串 Test,那 newT 呢?呵呵,是不是被第一个样例迷惑了?其实,此时 newT 是一个 Test 对象——有一个名为 name 的属性,其值为字符串 Test。

通过上面两段代码,我们可以得出一个猜测,如果函数返回值为常规意义上的值类型(Number、String、Boolean)时,new 函数将会返回一个该函数的实例对象,而如果函数返回一个引用类型(Object、Array、Function),则 new 函数与直接调用函数产生的结果等同。通过在 Test 函数中返回不同类型的值进行测试,可以证实这一点。

分清这一点,其实还是蛮重要的,至少在看一些面向对象的框架类库代码时,会少一些疑惑。

Javascript 相关文章推荐
showModelessDialog()使用详解
Sep 21 Javascript
jquery遍历input取得input的name
Apr 27 Javascript
能说明你的Javascript技术很烂的五个原因分析
Oct 28 Javascript
jQuery获取动态生成的元素示例
Jun 15 Javascript
JavaScript常用小技巧小结
Dec 29 Javascript
jQuery使用toggleClass方法动态添加删除Class样式的方法
Mar 26 Javascript
jQuery自动添加表单项的方法
Jul 13 Javascript
深入解析JavaScript中的立即执行函数
May 21 Javascript
JS实现十分钟倒计时代码实例
Oct 18 Javascript
微信小程序实现展示评分结果功能
Feb 15 Javascript
vue实现登录页面的验证码以及验证过程解析(面向新手)
Aug 02 Javascript
使用p5.js临摹动态图形
Oct 23 Javascript
浅析onsubmit校验表单时利用ajax的return false无效问题
Jul 10 #Javascript
JavaScript 模拟类机制及私有变量的方法及思路
Jul 10 #Javascript
js固定DIV高度,超出部分自动添加滚动条的简单方法
Jul 10 #Javascript
javascript 手动给表增加数据的小例子
Jul 10 #Javascript
基于javascript 闭包基础分享
Jul 10 #Javascript
关于include标签导致js路径找不到的问题分析及解决
Jul 09 #Javascript
等待指定时间后自动跳转或关闭当前页面的js代码
Jul 09 #Javascript
You might like
php数据结构 算法(PHP描述) 简单选择排序 simple selection sort
2011/08/09 PHP
一个图片地址分解程序(用于PHP小偷程序)
2014/08/23 PHP
PHP+MySQL插入操作实例
2015/01/21 PHP
ThinkPHP在Cli模式下使用模板引擎的方法
2015/09/25 PHP
PHP+JS三级菜单联动菜单实现方法
2016/02/24 PHP
PHP实现websocket通信的方法示例
2018/08/28 PHP
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
js获取html文件的思路及示例
2013/09/17 Javascript
JavaScript显示当然日期和时间即年月日星期和时间
2013/10/29 Javascript
jQuery照片伸缩效果不影响其他元素的布局
2014/05/09 Javascript
一个JavaScript去除字符串末尾的空白实例代码
2014/09/22 Javascript
将页面table内容与样式另存成excel文件的方法
2015/08/05 Javascript
JQuery菜单效果的两个实例讲解(3)
2015/09/17 Javascript
第一次接触JS require.js模块化工具
2016/04/17 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
2016/05/05 Javascript
js实现将json数组显示前台table中
2017/01/10 Javascript
Angularjs的$http异步删除数据详解及实例
2017/07/27 Javascript
vue中路由验证和相应拦截的使用详解
2017/12/13 Javascript
JS尾递归的实现方法及代码优化技巧
2019/01/19 Javascript
Django+vue跨域问题解决的详细步骤
2019/01/20 Javascript
基于vue如何发布一个npm包的方法步骤
2019/05/15 Javascript
关于vue的列表图片选中打钩操作
2020/09/09 Javascript
react的hooks的用法详解
2020/10/12 Javascript
[02:38]DOTA2 夜魇暗潮2020活动介绍官方视频
2020/11/04 DOTA
python使用7z解压软件备份文件脚本分享
2014/02/21 Python
使用py2exe在Windows下将Python程序转为exe文件
2016/03/04 Python
python字典键值对的添加和遍历方法
2016/09/11 Python
对python调用RPC接口的实例详解
2019/01/03 Python
HTML5 3D衣服摇摆动画特效
2016/03/17 HTML / CSS
以思科路由器为例你写下单臂路由的配置命令
2013/08/03 面试题
社团文化节策划书
2014/02/01 职场文书
医生党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
迁徙的鸟观后感
2015/06/09 职场文书
英语版自我评价,35句话轻松搞定
2019/10/08 职场文书
CSS变量实现主题切换的方法
2021/06/23 HTML / CSS
Apache Kafka 分区重分配的实现原理解析
2022/07/15 Servers