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 相关文章推荐
让div层随鼠标移动的实现代码 ie ff
Dec 18 Javascript
jquery 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大”效果 的实现
Apr 18 Javascript
javascript中的作用域scope介绍
Dec 28 Javascript
javascript针对DOM的应用分析(四)
Apr 15 Javascript
js返回上一页并刷新代码整理
Dec 21 Javascript
javascript延时加载之defer测试
Dec 28 Javascript
js判断为空Null与字符串为空简写方法
Feb 24 Javascript
查询json的数据结构的8种方式简介
Mar 10 Javascript
jquery查找tr td 示例模拟
May 08 Javascript
深入分析Javascript事件代理
Jan 30 Javascript
BootstrapValidator实现注册校验和登录错误提示效果
Mar 10 Javascript
JavaScript实现复选框全选和取消全选
Nov 20 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
基于mysql的bbs设计(三)
2006/10/09 PHP
基于php权限分配的实现代码
2013/04/28 PHP
php ci框架中加载css和js文件失败的解决方法
2014/03/03 PHP
WordPress 照片lightbox效果的运用几点
2009/06/22 Javascript
可自定义速度的js图片无缝滚动示例分享
2014/01/20 Javascript
jquery操作checked属性以及disabled属性的多种方法
2014/06/20 Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
2014/10/11 Javascript
Javascript的闭包详解
2014/12/26 Javascript
jquery实现倒计时效果
2015/12/14 Javascript
JS onkeypress兼容性写法详解
2016/04/27 Javascript
js中使用使用原型(prototype)定义方法的好处详解
2016/07/04 Javascript
使用JS中的exec()方法构造正则表达式验证
2016/08/01 Javascript
详解自动生成博客目录案例
2016/12/09 Javascript
使用jQuery.Pin垂直滚动时固定导航
2017/05/24 jQuery
浅谈ng-zorro使用心得
2018/12/03 Javascript
js中Function引用类型常见有用的方法和属性详解
2019/12/11 Javascript
vue ssr+koa2构建服务端渲染的示例代码
2020/03/23 Javascript
详解Vue串联过滤器的使用场景
2020/04/30 Javascript
用python实现的可以拷贝或剪切一个文件列表中的所有文件
2009/04/30 Python
python类型强制转换long to int的代码
2013/02/10 Python
Python随手笔记第一篇(2)之初识列表和元组
2016/01/23 Python
如何利用Fabric自动化你的任务
2016/10/20 Python
浅谈Python NLP入门教程
2017/12/25 Python
python编程测试电脑开启最大线程数实例代码
2018/02/09 Python
python3+selenium实现qq邮箱登陆并发送邮件功能
2019/01/23 Python
pandas去重复行并分类汇总的实现方法
2019/01/29 Python
详解【python】str与json类型转换
2019/04/29 Python
Django Admin中增加导出Excel功能过程解析
2019/09/04 Python
Python语法之精妙的十个知识点(装B语法)
2020/01/18 Python
pyCharm 设置调试输出窗口中文显示方式(字符码转换)
2020/06/09 Python
Python jieba结巴分词原理及用法解析
2020/11/05 Python
安全生产工作汇报材料
2014/10/28 职场文书
大一新生军训新闻稿
2015/07/17 职场文书
暑假生活随笔
2015/08/15 职场文书
2016廉洁教育心得体会
2016/01/20 职场文书
《遗弃》开发商删推文要跑路?官方回应:还在开发
2022/04/03 其他游戏