对new functionName()定义一个函数的理解


Posted in Javascript onMay 22, 2014

比如定义一个函数的两种调用方法:

function getInfo() { 
var info = { 
message: "message" 
}; 
return info; 
}

1、var info1 = getInfo();

2、var info2 = new getInfo();

1和2有什么区别吗?info1和info2得到的值是一样的吗?

第1种很简单,用的也很多,就是执行一个函数,并接受函数的返回值并赋给info1对象;

第2种情况一般就很少见了。首先,函数也是一种对象,是对象肯定就可以实例化(实例化其实就是调用对象的构造函数对对象进行初始化),所有第2种情况就是调用getInfo函数对象的构造函数,并接收构造函数初始化的实例(一般都是this),而函数有个比较特别的地方就是,如果构造函数有显示返回值,将用该返回值替换this对象返回。所以第2中情况new getInfo就是调用构造函数(函数的构造函数就是其定义本身)并接收返回值info。

应用:

1、比如HTML定义了DOM对象:<div id="domId"></div>,js代码如下:

function $(domId) { 
var dom = document.getElementById(domId); 
return dom; 
} window.onload = function() { 
var dom1 = new $("domId"); 
var dom2 = $("domId"); 
alert(dom1 == dom2); 
}

则alert提示信息将显示true。之所以使用$做函数名,是因为 使用这个函数的时候是不是有点像jQuery的风格呢?其实jQuery的构造函数里就应用了这种风格的函数定义,不管你是用new还是直接调用函数,返回的值都是一样的。

2、定义兼容的XMLHttpRequest对象(本例摘自Javascript权威指南的第18.1节)
大家都知道不同的浏览器对异步通信支持的方式可能不一样,早期的IE是用的ActiveX的方式,下面的代码定义了一个兼容的XMLHttpRequest对象:

if (window.XMLHttpRequest === undefined) { 
window.XMLHttpRequest = function() { 
try { 
//如果可用,则使用ActiveX对象最新的版本 
return new ActiveXObject("Msxml2.XMLHTTP.6.0"); 
} catch (ex1) { 
try { 
return new ActiveXObject("Msxml2.XMLHTTP.3.0"); 
} catch (ex2) { 
throw new Error("XMLHttpRequest is not supported") 
} 
} 
} 
}

这样,就可以直接通过 var xhr = new XMLHttpRequest()定义了,而不用管是IE浏览器还是火狐浏览器。
Javascript 相关文章推荐
fckeditor 获取文本框值的实现代码
Feb 09 Javascript
javascript 面向对象编程 聊聊对象的事
Sep 17 Javascript
使用JQuery库提供的扩展功能实现自定义方法
Sep 09 Javascript
浅谈javascript 迭代方法
Jan 21 Javascript
JQuery自适应窗口大小导航菜单附源码下载
Sep 01 Javascript
js表单验证实例讲解
Mar 31 Javascript
javascript中异常处理案例(推荐)
Oct 03 Javascript
微信小程序 canvas API详解及实例代码
Oct 08 Javascript
微信小程序 两种为对象属性赋值的方式详解
Feb 23 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
Jul 22 jQuery
详解ECMAScript2019/ES10新属性
Dec 06 Javascript
JS实现百度搜索框关键字推荐
Feb 17 Javascript
教你如何使用PHP输出中文JSON字符串
May 22 #Javascript
JS完整获取IE浏览器信息包括类型、版本、语言等等
May 22 #Javascript
JS常用表单验证方法总结
May 22 #Javascript
一个Action如何调用两个不同的方法
May 22 #Javascript
选择复选框按钮置灰否则按钮可用
May 22 #Javascript
JavaScript获取路径设计源码
May 22 #Javascript
javascript学习笔记--数字格式类型
May 22 #Javascript
You might like
基于mysql的论坛(6)
2006/10/09 PHP
php模仿asp Application对象在线人数统计实现方法
2015/01/04 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
2015/07/15 PHP
微信第三方登录(原生)demo【必看篇】
2017/05/26 PHP
php如何比较两个浮点数是否相等详解
2019/02/12 PHP
鼠标图片振动代码
2006/07/06 Javascript
修改js Calendar日历控件 兼容IE9/谷歌/火狐
2013/01/04 Javascript
原生javaScript做得动态表格(注释写的很清楚)
2013/12/29 Javascript
jQuery - css() 方法示例详解
2014/01/16 Javascript
JS中如何判断传过来的JSON数据中是否存在某字段
2014/08/18 Javascript
JQuery限制复选框checkbox可选中个数的方法
2015/04/20 Javascript
Javascript中的迭代、归并方法详解
2016/06/14 Javascript
js字符串引用的两种方式(必看)
2016/09/18 Javascript
详解Vue生命周期的示例
2017/03/10 Javascript
详解Vue中watch的高级用法
2018/05/02 Javascript
微信小程序自定义组件之可清除的input组件
2018/07/17 Javascript
小程序分页实践之编写可复用分页组件
2019/07/18 Javascript
解决layui的使用以及针对select、radio等表单组件不显示的问题
2019/09/05 Javascript
js实现轮播图特效
2020/05/28 Javascript
three.js 实现露珠滴落动画效果的示例代码
2021/03/01 Javascript
python 3.5下xadmin的使用及修复源码bug
2017/05/10 Python
numpy中以文本的方式存储以及读取数据方法
2018/06/04 Python
python 快速把超大txt文件转存为csv的实例
2018/10/26 Python
Django choices下拉列表绑定实例
2020/03/13 Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
2020/06/12 Python
python常量折叠基础知识点讲解
2021/02/28 Python
css3实现一个div设置多张背景图片及background-image属性实例演示
2017/08/10 HTML / CSS
英国高街品牌:Miss Selfridge(塞尔弗里奇小姐)
2016/09/21 全球购物
英国舒适型鞋履品牌:FitFlop
2017/05/17 全球购物
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
int *p=NULL和*p= NULL有什么区别
2014/10/23 面试题
教师开学感言
2014/02/14 职场文书
党员自我评价范文2015
2015/03/03 职场文书
团日活动总结格式
2015/05/11 职场文书
2015年银行信贷员工作总结
2015/05/19 职场文书
安装harbor作为docker镜像仓库的问题
2022/06/14 Servers