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

 更新时间:2014年05月22日 10:45:00   作者:  
这篇文章主要介绍了对new functionName()定义一个函数的理解,需要的朋友可以参考下
比如定义一个函数的两种调用方法:
复制代码 代码如下:

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浏览器还是火狐浏览器。

相关文章

  • js资料toString 方法

    js资料toString 方法

    js资料toString 方法...
    2007-03-03
  • Document 对象的常用方法

    Document 对象的常用方法

    通过元素的ID访问元素,这是DOM一个基础的访问页面元素的方法,我们要经常用到它.
    2009-07-07
  • java中String类型变量的赋值问题介绍

    java中String类型变量的赋值问题介绍

    下面小编就为大家带来一篇java中String类型变量的赋值问题介绍。小编觉得挺不错的。现在分享给大家,给大家一个参考。
    2016-03-03
  • javascript深拷贝的几种情况总结

    javascript深拷贝的几种情况总结

    这篇文章主要为大家介绍了javascript深拷贝的几种情况,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • 深入分析Javascript事件代理

    深入分析Javascript事件代理

    JavaScript事件是所有网页互动性的根基。在传统的事件处理中,事件处理器将有可能导致内存泄露或者是性能下降,JavaScript事件代理则是一种简单的技巧,通过它你可以把事件处理器添加到一个父级元素上,这样就避免了把事件处理器添加到多个子级元素上。
    2016-01-01
  • Array对象方法参考

    Array对象方法参考

    Array对象方法参考...
    2006-10-10
  • Knockoutjs快速入门(经典)

    Knockoutjs快速入门(经典)

    Knockoutjs是一个JavaScript实现的MVVM框架.主要有如下几个功能1. Declarative bindings2. Observables and dependency tracking3. Templating,需要了解的朋友可以参考下
    2012-12-12
  • JavaScript闭包详解

    JavaScript闭包详解

    本文详细介绍了javascript闭包,十分的详尽,推荐给有需要的小伙伴参考下。
    2015-02-02
  • JavaScript事件列表解说

    JavaScript事件列表解说

    JavaScript事件列表解说...
    2006-12-12
  • Javascript快速排序算法详解

    Javascript快速排序算法详解

    这篇文章主要介绍了Javascript快速排序算法的相关资料,需要的朋友可以参考下
    2014-12-12

最新评论