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 相关文章推荐
jquery 3D球状导航的文章分类
Jul 06 Javascript
面向对象的Javascript之二(接口实现介绍)
Jan 27 Javascript
随窗体滑动的小插件sticky源码
Jun 21 Javascript
JS小功能(onmouseover实现选择月份)实例代码
Nov 28 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
Apr 12 Javascript
JavaScript截断字符串的方法
Jul 15 Javascript
微信小程序 wxapp视图容器 view详解
Oct 31 Javascript
jQuery快速实现商品数量加减的方法
Feb 06 Javascript
使用vue.js写一个tab选项卡效果
Mar 25 Javascript
最通俗易懂的javascript变量提升详解
Aug 05 Javascript
在vue中使用jsx语法的使用方法
Sep 30 Javascript
javascript实现拼图游戏
Jan 29 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中uploaded_files函数使用方法详解
2011/03/09 PHP
PHP获取文件的MD5值并判断是否被修改的例子
2014/06/19 PHP
PHP自带方法验证邮箱是否存在
2016/02/01 PHP
Zend Framework校验器Zend_Validate用法详解
2016/12/09 PHP
PHP实现判断数组是一维、二维或几维的方法
2017/02/06 PHP
laravel 多图上传及图片的存储例子
2019/10/14 PHP
javascript英文日期(有时间)选择器
2007/05/02 Javascript
高效的表格行背景隔行变色及选定高亮的JS代码
2010/12/04 Javascript
javascript 3d 逐侦产品展示(核心精简)
2014/03/26 Javascript
JavaScript中获取时间的函数集
2016/08/16 Javascript
[js高手之路]图解javascript的原型(prototype)对象,原型链实例
2017/08/28 Javascript
JavaScript canvas实现围绕旋转动画
2017/11/18 Javascript
vue2实现可复用的轮播图carousel组件详解
2017/11/27 Javascript
vuex + axios 做登录验证 并且保存登录状态的实例
2018/09/16 Javascript
jQuery序列化form表单数据为JSON对象的实现方法
2018/09/20 jQuery
angular4 获取wifi列表中文显示乱码问题的解决
2018/10/20 Javascript
ES6 let和const定义变量与常量的应用实例分析
2019/06/27 Javascript
uniapp 仿微信的右边下拉选择弹出框的实现代码
2020/07/12 Javascript
Python中实现对Timestamp和Datetime及UTC时间之间的转换
2015/04/08 Python
Python 常用string函数详解
2016/05/30 Python
让python 3支持mysqldb的解决方法
2017/02/14 Python
在Python程序员面试中被问的最多的10道题
2017/12/05 Python
python爬虫获取京东手机图片的图文教程
2017/12/29 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
2018/05/31 Python
在Python中COM口的调用方法
2019/07/03 Python
python如何将多个PDF进行合并
2019/08/13 Python
Python使用docx模块实现刷题功能代码
2020/02/13 Python
css3个性化字体_动力节点Java学院整理
2017/07/12 HTML / CSS
Kate Spade美国官网:纽约新兴时尚品牌,以包包闻名于世
2017/11/09 全球购物
全球最大运动品牌的男装、女装和童装官方库存商:A&A Sports
2021/01/17 全球购物
计算机应届毕业生自荐信范文
2014/02/23 职场文书
公司总经理助理岗位职责
2014/07/09 职场文书
公务员群众路线专题民主生活会发言材料
2014/09/17 职场文书
护理实习生带教计划
2015/01/16 职场文书
2015医德医风个人工作总结
2015/04/02 职场文书
Spring this调用当前类方法无法拦截的示例代码
2022/03/20 Java/Android