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 相关文章推荐
关于javascript中this关键字(翻译+自我理解)
Oct 20 Javascript
js各种验证文本框输入格式(正则表达式)
Oct 22 Javascript
jQuery实战之品牌展示列表效果
Apr 10 Javascript
JavaScript获取function所有参数名的方法
Oct 30 Javascript
JavaScript的Backbone.js框架的一些使用建议整理
Feb 14 Javascript
javascript实现数据双向绑定的三种方式小结
Mar 09 Javascript
原生javascript移动端滑动banner效果
Mar 10 Javascript
javascript中mouseenter与mouseover的异同
Jun 06 Javascript
工作中常用到的ES6语法
Sep 04 Javascript
AngularJS实现的鼠标拖动画矩形框示例【可兼容IE8】
May 17 Javascript
layui 数据表格复选框实现单选功能的例子
Sep 19 Javascript
create-react-app中添加less支持的实现
Nov 15 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中常用编辑器推荐
2007/01/02 PHP
php array_unique之后json_encode需要注意
2011/01/02 PHP
用来解析.htgroup文件的PHP类
2012/09/05 PHP
Symfony生成二维码的方法
2016/02/04 PHP
PHP引用返回用法示例
2016/05/28 PHP
实例说明js脚本语言和php脚本语言的区别
2019/04/04 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
2019/10/16 PHP
jquery $(document).ready() 与window.onload的区别
2009/12/28 Javascript
JSON 教程 json入门学习笔记
2020/09/22 Javascript
JavaScript建立一个语法高亮输入框实现思路
2013/02/26 Javascript
JavaScript数据类型检测代码分享
2015/01/26 Javascript
神奇!js+CSS+DIV实现文字颜色渐变效果
2016/03/16 Javascript
如何用JavaScript实现动态修改CSS样式表
2016/05/20 Javascript
微信小程序 获取微信OpenId详解及实例代码
2016/10/31 Javascript
3种不同的ContextMenu右键菜单实现代码
2016/11/03 Javascript
ligerUI---ListBox(列表框可移动的实例)
2017/11/28 Javascript
vue webpack开发访问后台接口全局配置的方法
2018/09/18 Javascript
微信小程序实现购物车代码实例详解
2019/08/29 Javascript
layui table表格数据的新增,修改,删除,查询,双击获取行数据方式
2019/11/14 Javascript
[06:25]DOTA2英雄梦之声_第17期_大地之灵
2014/06/20 DOTA
深入理解Python中装饰器的用法
2016/06/28 Python
Python文件监听工具pyinotify与watchdog实例
2018/10/15 Python
解决django前后端分离csrf验证的问题
2019/02/03 Python
一文了解Python并发编程的工程实现方法
2019/05/31 Python
python集成开发环境配置(pycharm)
2020/02/14 Python
Python2.x与3​​.x版本有哪些区别
2020/07/09 Python
纯CSS3发光分享按钮的实现教程
2014/09/06 HTML / CSS
Johnson Fitness澳大利亚:高级健身器材
2021/03/16 全球购物
JDBC操作数据库的基本流程是什么
2014/10/28 面试题
员工年终演讲稿
2014/01/03 职场文书
创业计划书如何吸引他人眼球
2014/01/10 职场文书
怎样写好自我评价呢?
2014/02/16 职场文书
行政专员岗位职责说明书
2014/07/30 职场文书
婚庆答谢词大全
2015/09/29 职场文书
2016大学优秀学生干部事迹材料
2016/03/01 职场文书
Python类方法总结讲解
2021/07/26 Python