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相关方法函数
Dec 06 Javascript
10条建议帮助你创建更好的jQuery插件
May 18 Javascript
极易被忽视的javascript面试题七问七答
Feb 15 Javascript
全面了解JavaScript的数据类型转换
Jul 01 Javascript
浅谈Web页面向后台提交数据的方式和选择
Sep 23 Javascript
jQuery UI 实例讲解 - 日期选择器(Datepicker)
Sep 18 jQuery
jQuery响应滚动条事件功能示例
Oct 14 jQuery
在React项目中使用Eslint代码检查工具及常见问题
Oct 10 Javascript
运用js实现图层拖拽的功能
May 24 Javascript
vue中使用v-model完成组件间的通信
Aug 22 Javascript
JavaScript正则表达式验证登录实例
Mar 18 Javascript
Vue实现背景更换颜色操作
Jul 17 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强制运行广告的方法
2014/12/01 PHP
解决nginx不支持thinkphp中pathinfo的问题
2015/07/21 PHP
PHP中COOKIES使用示例
2015/07/26 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
2015/12/22 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
让firefox支持IE的一些方法的javascript扩展函数代码
2010/01/02 Javascript
javascript中的onkeyup和onkeydown区别介绍
2013/04/28 Javascript
js截取固定长度的中英文字符的简单实例
2013/11/22 Javascript
Javascript中的默认参数详解
2014/10/22 Javascript
js中confirm实现执行操作前弹出确认框的方法
2014/11/01 Javascript
JS控制文本域只读或可写属性的方法
2016/06/24 Javascript
判断输入的字符串是否是日期格式的简单方法
2016/07/11 Javascript
jQuery表单事件实例代码分享
2016/08/18 Javascript
web.js.字符串与正则表达式操作
2017/05/13 Javascript
解决vue页面刷新或者后退参数丢失的问题
2018/03/13 Javascript
通过vue提供的keep-alive减少对服务器的请求次数
2018/04/01 Javascript
JS拖动选择table里的单元格完整实例【基于jQuery】
2019/05/28 jQuery
解决vue单页面应用中动态修改title问题
2019/06/09 Javascript
在项目vue中使用echarts的操作步骤
2020/09/07 Javascript
python调用cmd命令行制作刷博器
2014/01/13 Python
Python的print用法示例
2014/02/11 Python
python变量不能以数字打头详解
2016/07/06 Python
在脚本中单独使用django的ORM模型详解
2020/04/01 Python
Python数据正态性检验实现过程
2020/04/18 Python
python脚本定时发送邮件
2020/12/22 Python
全球异乡人的跨境社交电商平台:Kouhigh口嗨网
2020/07/24 全球购物
人力资源行政经理自我评价
2013/10/23 职场文书
五星级酒店餐饮部总监的标准岗位职责
2014/02/17 职场文书
终止或解除劳动合同及劳动关系的证明书
2014/10/06 职场文书
大班上学期个人总结
2015/02/13 职场文书
民主评议党员个人总结
2015/02/13 职场文书
应届毕业生求职信范文
2015/03/19 职场文书
2016年庆祝六一儿童节活动总结
2016/04/06 职场文书
Python 详解通过Scrapy框架实现爬取百度新冠疫情数据流程
2021/11/11 Python
HTML中的表单元素介绍
2022/02/28 HTML / CSS