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利用初始化数据装配模版的实现代码
Nov 17 Javascript
纯Javascript实现Windows 8 Metro风格实现
Oct 15 Javascript
js字母大小写转换实现方法总结
Nov 13 Javascript
js仿土豆网带缩略图的焦点图片切换效果实现方法
Feb 23 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
Sep 17 Javascript
酷炫jQuery全屏3D焦点图动画效果
Mar 22 Javascript
js 判断各种数据类型的简单方法(推荐)
Aug 29 Javascript
javaScript封装的各种写法
Aug 14 Javascript
详解Ubuntu安装angular-cli遇到的坑
Sep 08 Javascript
深入理解Vue.js轻量高效的前端组件化方案
Dec 10 Javascript
vue实现父子组件之间的通信以及兄弟组件的通信功能示例
Jan 29 Javascript
Webpack3+React16代码分割的实现
Mar 03 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日历[测试通过]
2008/03/27 PHP
深入PHP数据缓存的使用说明
2013/05/10 PHP
php简单计算页面加载时间的方法
2015/06/19 PHP
php基于curl实现随机ip地址抓取内容的方法
2016/10/11 PHP
基于jQuery的遍历同id元素 并响应事件的代码
2012/06/14 Javascript
jQuery删除节点的三个方法即remove()detach()和empty()
2013/12/27 Javascript
Jquery原生态实现表格header头随滚动条滚动而滚动
2014/03/18 Javascript
Jquery 实现grid绑定模板
2015/01/28 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
让JavaScript中setTimeout支持链式操作的方法
2015/06/19 Javascript
在JavaScript中如何解决用execCommand(
2015/10/19 Javascript
AngularJS表格添加序号的方法
2017/03/03 Javascript
jQuery实现select下拉框获取当前选中文本、值、索引
2017/05/08 jQuery
vue.js的安装方法
2017/05/12 Javascript
JavaScript实现各种排序的代码详解
2017/08/28 Javascript
浅谈vue项目优化之页面的按需加载(vue+webpack)
2017/12/11 Javascript
JavaScript实现简单动态进度条效果
2018/04/06 Javascript
this在vue和小程序中的使用详解
2019/01/28 Javascript
[00:03]DOTA2新版本PA至宝展示
2014/11/19 DOTA
python中列表元素连接方法join用法实例
2015/04/07 Python
基于Python的关键字监控及告警
2017/07/06 Python
Python中的浮点数原理与运算分析
2017/10/12 Python
Python抓取框架Scrapy爬虫入门:页面提取
2017/12/01 Python
Django视图和URL配置详解
2018/01/31 Python
Python实现按照指定要求逆序输出一个数字的方法
2018/04/19 Python
不到40行代码用Python实现一个简单的推荐系统
2019/05/10 Python
通过Python编写一个简单登录功能过程解析
2019/09/04 Python
Python爬虫解析网页的4种方式实例及原理解析
2019/12/30 Python
详解Python中的分支和循环结构
2020/02/11 Python
python rsa-oaep加密的示例代码
2020/09/23 Python
英国著名药妆店:Superdrug
2021/02/13 全球购物
活动总结怎么写
2014/04/28 职场文书
奥运会口号
2014/06/13 职场文书
教师个人师德工作总结2015
2015/05/12 职场文书
2016年感恩节活动总结大全
2016/04/01 职场文书
某药房的新员工入职告知书!
2019/07/15 职场文书