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 相关文章推荐
IE中jquery.form中ajax提交没反应解决方法分享
Sep 11 Javascript
JavaScript中的标签语句用法分析
Feb 10 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
Mar 30 Javascript
使用JavaScript实现旋转的彩圈特效
Jun 23 Javascript
原生JS实现拖拽图片效果
Aug 27 Javascript
实例讲解jQuery EasyUI tree中state属性慎用
Apr 01 Javascript
vue iView 上传组件之手动上传功能
Mar 16 Javascript
微信小程序用户位置权限的获取方法(拒绝后提醒)
Nov 15 Javascript
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
Jun 09 Javascript
layui 实现表格某一列显示图标
Sep 19 Javascript
ES6之Proxy的get方法详解
Oct 11 Javascript
JavaScript如何使用插值实现图像渐变
Jun 28 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 $_ENV为空的原因分析
2009/06/01 PHP
php生成随机颜色的方法
2014/11/13 PHP
PHP在linux上执行外部命令的方法
2017/02/06 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
PHP容器类的两种实现方式示例
2019/07/24 PHP
javascript 动态创建表格
2015/01/08 Javascript
JavaScript使用cookie记录临时访客信息的方法
2015/04/07 Javascript
JavaScript中Function函数与Object对象的关系
2015/12/17 Javascript
jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
2016/05/27 Javascript
JavaScript直播评论发弹幕切图功能点集合效果代码
2016/06/26 Javascript
用jQuery的AJax实现异步访问、异步加载
2016/11/02 Javascript
纯js实现动态时间显示
2020/09/07 Javascript
JavaScript设计模式之责任链模式实例分析
2019/01/16 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
2019/03/29 Javascript
js实现图片实时时钟
2020/01/15 Javascript
在vue项目中利用popstate处理页面返回的操作介绍
2020/08/06 Javascript
Vue实现点击导航栏当前标签后变色功能
2020/08/19 Javascript
[15:09]DOTA2国际邀请赛采访专栏:Loda
2013/08/06 DOTA
[01:10:48]完美世界DOTA2联赛PWL S2 GXR vs PXG 第一场 11.18
2020/11/18 DOTA
Python引用(import)文件夹下的py文件的方法
2014/08/26 Python
python修改注册表终止360进程实例
2014/10/13 Python
Python爬取成语接龙类网站
2018/10/19 Python
python爬虫超时的处理的实例
2018/12/19 Python
Django values()和value_list()的使用
2020/03/31 Python
Python ORM框架Peewee用法详解
2020/04/29 Python
python如何代码集体右移
2020/07/20 Python
CSS3的新特性介绍
2008/10/31 HTML / CSS
英国领先的名牌服装折扣零售商:Brown Bag Clothing
2019/01/08 全球购物
美工的岗位职责
2013/11/14 职场文书
文艺晚会主持词
2014/03/24 职场文书
教师党员个人整改措施材料
2014/09/16 职场文书
团组织推优材料
2014/12/29 职场文书
史上最全书信经典范文大全(建议收藏)
2019/07/10 职场文书
如何理解及使用Python闭包
2021/06/01 Python
Python下opencv使用hough变换检测直线与圆
2021/06/18 Python
MySQL数据库表约束讲解
2022/06/21 MySQL