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 相关文章推荐
用js实现的检测浏览器和系统的函数
Apr 09 Javascript
DIV菜单层实现代码
Nov 19 Javascript
jQuery EasyUI API 中文文档 - Dialog对话框
Nov 15 Javascript
清除div下面的所有标签的方法
Feb 17 Javascript
js模拟hashtable的简单实例
Mar 06 Javascript
node.js中的http.response.setHeader方法使用说明
Dec 14 Javascript
jQuery中的ajax async同步和异步详解
Sep 29 Javascript
JS组件Bootstrap Table使用方法详解
Feb 02 Javascript
jquery输入数字随机抽奖特效的简单实现代码
Jun 10 Javascript
微信小程序 地图(map)实例详解
Nov 16 Javascript
jQuery实现可编辑表格并生成json结果(实例代码)
Jul 19 jQuery
细说webpack源码之compile流程-rules参数处理技巧(1)
Dec 26 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 和 HTML
2006/10/09 PHP
兼容性最强的PHP生成缩略图的函数代码(修改版)
2011/01/18 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(五)
2014/06/23 PHP
优化WordPress的Google字体以加速国内服务器上的运行
2015/11/24 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
document.all与WEB标准
2020/05/13 Javascript
javascript 面向对象的JavaScript类
2010/05/04 Javascript
javascript forEach通用循环遍历方法
2010/10/11 Javascript
简单的ajax连接库分享(不用jquery的ajax)
2014/01/19 Javascript
JS控制输入框内字符串长度
2014/05/21 Javascript
jquery uploadify 在FF下无效的解决办法
2014/09/26 Javascript
jquery 操作css样式、位置、尺寸方法汇总
2014/11/28 Javascript
JS实现单行文字不间断向上滚动的方法
2015/01/29 Javascript
深入理解JQuery中的事件与动画
2016/05/18 Javascript
Validform表单验证总结篇
2016/10/31 Javascript
Bootstrap 3.x打印预览背景色与文字显示异常的解决
2016/11/06 Javascript
JS实现前端页面的搜索功能
2018/06/12 Javascript
如何使用proxy实现一个简单完整的MVVM库的示例代码
2019/09/17 Javascript
JavaScript使用百度ECharts插件绘制饼图操作示例
2019/11/26 Javascript
JS实现点星星消除小游戏
2020/03/24 Javascript
Python实现基本线性数据结构
2016/08/22 Python
Python定时器实例代码
2017/11/01 Python
分析python动态规划的递归、非递归实现
2018/03/04 Python
python之django母板页面的使用
2018/07/03 Python
python 读取竖线分隔符的文本方法
2018/12/20 Python
Python实现CAN报文转换工具教程
2020/05/05 Python
python简单实现插入排序实例代码
2020/12/16 Python
CSS3实现伪类hover离开时平滑过渡效果示例
2017/08/10 HTML / CSS
HTML5 Canvas 旋转风车绘制
2017/08/18 HTML / CSS
社会公德演讲稿
2014/05/20 职场文书
学校领导班子四风问题整改意见
2014/10/02 职场文书
2014年房地产工作总结范文
2014/11/19 职场文书
升学宴学生答谢词
2015/01/05 职场文书
小学生暑假安全公约
2015/07/14 职场文书
聘任书格式及范文
2015/09/21 职场文书
详解Redis集群搭建的三种方式
2021/05/31 Redis