JS中的构造函数详细解析


Posted in Javascript onMarch 10, 2014

在JavaScript中,任何合法的函数都可以作为对象的构造函数,这既包括系统内置函数,也包括用户自己定义的函数。一旦函数被作为构造函数执行,它内部的this属性将引用函数本身。

通常来说,构造函数没有返回值,它们只是初始化由this指针传递进来的对象,并且什么也不返回。如果一个函数有返回值,被返回的对象就成了new表达式的值。从形式上看,一个函数被作为构造函数还是普通函数执行的唯一区别,是否用new运算符。

上面的描述事实上有着更为精确的含义,这要把函数如果有返回值的情况分为函数的返回值是引用类型和值类型两种情况。

如果一个函数的返回值是引用类型(数组,对象或者函数)的数据,那么这个函数作为构造函数用new运算符执行构造时,运算的结果将被它的返回值取代,这时候,构造函数体内的this值丢失了,取而代之的是被返回的对象。例如:

function test()
{
   this.a=10;
   return function()
   {
      return 1;
   }
}
alert m=new test();
var n=test();
alert(m);//返回return后面的闭包
alert(n);//返回return 后面的闭包

运行结果m的值和n的值是一样的,都是test函数返回的闭包,而this引用的对象和this.a=10的赋值结果全部被丢弃。

如果一个函数的返回值是一个值类型,那么这个函数作为构造函数用new运算符执行构造时,它的返回值将被丢弃。new 表达式的结果仍然是this所引用的对象。

function test()
{
   this.a=10;
    return 1;
}
alert m=new test();
var n=test();
alert(m)//返回【Object】
alert(n)//返回1.
Javascript 相关文章推荐
JS 无限级 Select效果实现代码(json格式)
Aug 30 Javascript
探索Emberjs制作一个简单的Todo应用
Nov 07 Javascript
javascript中简单的进制转换代码实例
Oct 26 Javascript
关于jQuery中的each方法(jQuery到底干了什么)
Mar 05 Javascript
Javascript 字符串模板的简单实现
Feb 13 Javascript
微信小程序 选择器(时间,日期,地区)实例详解
Nov 16 Javascript
深入浅出webpack之externals的使用
Dec 04 Javascript
微信小程序之swiper轮播图中的图片自适应高度的方法
Apr 23 Javascript
原生JS实现列表内容自动向上滚动效果
May 22 Javascript
jQuery - AJAX load() 实例用法详解
Aug 27 jQuery
JS获取表格视图所选行号的ids过程解析
Feb 21 Javascript
Vue scoped及deep使用方法解析
Aug 01 Javascript
node.js使用nodemailer发送邮件实例
Mar 10 #Javascript
php中给js数组赋值方法
Mar 10 #Javascript
javascript操作referer详细解析
Mar 10 #Javascript
JS数组的赋值介绍
Mar 10 #Javascript
JS删除字符串中重复字符方法
Mar 09 #Javascript
用JavaScript实现类似于ListBox功能示例代码
Mar 09 #Javascript
jquery下div 的resize事件示例代码
Mar 09 #Javascript
You might like
浏览器预览PHP文件时顶部出现空白影响布局分析原因及解决办法
2013/01/11 PHP
使用cookie实现统计访问者登陆次数
2013/06/08 PHP
PHP的PSR规范中文版
2013/09/28 PHP
Yii清理缓存的方法
2016/01/06 PHP
laravel5.4生成验证码的实例讲解
2017/08/05 PHP
PHP htmlspecialchars() 函数实例代码及用法大全
2018/09/18 PHP
php实现多站点共用session实现单点登录的方法详解
2019/09/18 PHP
详解阿里云视频直播PHP-SDK接入教程
2020/07/09 PHP
JavaScript 在各个浏览器中执行的耐性
2009/04/06 Javascript
IE6下opacity与JQuery的奇妙结合
2013/03/01 Javascript
javascript中的变量作用域以及变量提升详细介绍
2013/10/24 Javascript
Google 地图类型详解及示例代码
2016/08/06 Javascript
jquery结合html实现中英文页面切换
2016/11/29 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
js放到head中失效的原因与解决方法
2017/03/07 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
vue+vuex+json-seiver实现数据展示+分页功能
2019/04/11 Javascript
Vue源码解析之数据响应系统的使用
2019/04/24 Javascript
vue分页插件的使用方法
2019/12/25 Javascript
[02:53]DOTA2英雄基础教程 山岭巨人小小
2013/12/09 DOTA
利用python程序帮大家清理windows垃圾
2017/01/15 Python
django项目运行因中文而乱码报错的几种情况解决
2017/11/07 Python
Python 数据处理库 pandas 入门教程基本操作
2018/04/19 Python
Python List cmp()知识点总结
2019/02/18 Python
Python3.0中普通方法、类方法和静态方法的比较
2019/05/03 Python
Python微信操控itchat的方法
2019/05/31 Python
python网络编程之多线程同时接受和发送
2019/09/03 Python
Pandas数据离散化原理及实例解析
2019/11/16 Python
python打印异常信息的两种实现方式
2019/12/24 Python
Space NK美国站:英国高端美妆护肤商城
2017/05/22 全球购物
公司清洁工岗位职责
2013/12/14 职场文书
会计专业应届生自荐信
2014/02/07 职场文书
白鹤梁导游词
2015/02/06 职场文书
2015年师德师风自我评价范文
2015/03/05 职场文书
劳动者解除劳动合同通知书
2015/04/16 职场文书
领导干部学习十八届五中全会精神心得体会
2016/01/05 职场文书