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 相关文章推荐
jquery each()源代码
Feb 14 Javascript
js函数排序的实例代码
Jul 01 Javascript
Jquery 改变radio/checkbox选中状态,获取选中的值(示例代码)
Dec 12 Javascript
ECMAScript6中Map/WeakMap详解
Jun 12 Javascript
JavaScript 消息框效果【实现代码】
Apr 27 Javascript
jQuery获取当前点击的对象元素(实现代码)
May 19 Javascript
javascript显示倒计时控制按钮的简单实现
Jun 07 Javascript
JQuery实现DIV其他动画效果的简单实例
Sep 18 Javascript
详解ElementUI之表单验证、数据绑定、路由跳转
Jun 21 Javascript
详解vue前后台数据交互vue-resource文档
Jul 19 Javascript
uni app仿微信顶部导航条功能
Sep 17 Javascript
解决Layui 表格自适应高度的问题
Nov 15 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/06/06 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
2015/08/18 PHP
详解PHP中websocket的使用方法
2016/09/15 PHP
PHP笛卡尔积实现算法示例
2018/07/30 PHP
对laravel的csrf 防御机制详解,及form中csrf_token()的存在介绍
2019/10/24 PHP
javascript 类定义的4种方法
2009/09/12 Javascript
增强用户体验友好性之jquery easyui window 窗口关闭时的提示
2012/06/22 Javascript
jquery中.add()的使用分析
2013/04/26 Javascript
简介alert()与console.log()的不同
2015/08/26 Javascript
js带闹铃功能的倒计时代码
2016/09/29 Javascript
JS去除重复并统计数量的实现方法
2016/12/15 Javascript
JavaScript中从setTimeout与setInterval到AJAX异步
2017/02/13 Javascript
js中数组插入、删除元素操作的方法
2017/02/15 Javascript
Java与JavaScript中判断两字符串是否相等的区别
2017/03/13 Javascript
微信小程序websocket实现即时聊天功能
2019/05/21 Javascript
JS插件amCharts实现绘制柱形图默认显示数值功能示例
2019/11/26 Javascript
JS快速实现简单计算器
2020/04/08 Javascript
Vue常用API、高级API的相关总结
2021/02/02 Vue.js
[01:21]DOTA2周边文化主题展 神秘商店火热开售
2017/07/30 DOTA
Python中字典(dict)和列表(list)的排序方法实例
2014/06/16 Python
python实现定制交互式命令行的方法
2014/07/03 Python
python安装cx_Oracle模块常见问题与解决方法
2017/02/21 Python
Python实现选择排序
2017/06/04 Python
Python编程之变量赋值操作实例分析
2017/07/24 Python
Win10下python 2.7.13 安装配置方法图文教程
2018/09/18 Python
Windows10下 python3.7 安装 facenet的教程
2019/09/10 Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
2020/06/29 Python
经验丰富程序员才知道的8种高级Python技巧
2020/07/27 Python
Python 执行矩阵与线性代数运算
2020/08/01 Python
CSS3教程:新增加的结构伪类
2009/04/02 HTML / CSS
环保建议书200字
2014/05/14 职场文书
模范教师材料大全
2014/12/16 职场文书
先进工作者申报材料
2014/12/23 职场文书
企业计划生育责任书
2015/05/09 职场文书
记者节感言
2015/08/03 职场文书
公司年会晚会开幕词
2019/04/02 职场文书