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 相关文章推荐
jsTree树控件(基于jQuery, 超强悍)[推荐]
Sep 01 Javascript
颜色选择器 Color Picker,IE,Firefox,Opera,Safar
Nov 25 Javascript
JavaScript 5 新增 Array 方法实现介绍
Feb 06 Javascript
node.js中的path.sep方法使用说明
Dec 08 Javascript
使用jquery组件qrcode生成二维码及应用指南
Feb 22 Javascript
浅析JavaScript访问对象属性和方法及区别
Nov 16 Javascript
Bootstarp 基础教程之表单部分实例代码
Feb 03 Javascript
VUE axios发送跨域请求需要注意的问题
Jul 06 Javascript
Vue项目中使用jquery的简单方法
May 16 jQuery
微信小程序 简易计算器实现代码实例
Sep 02 Javascript
详谈Vue.js框架下main.js,App.vue,page/index.vue之间的区别
Aug 12 Javascript
js屏蔽F12审查元素,禁止修改页面代码等实现代码
Oct 02 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 ci框架中加载css和js文件失败的解决方法
2014/03/03 PHP
php使用Cookie控制访问授权的方法
2015/01/21 PHP
Zend Framework教程之动作的基类Zend_Controller_Action详解
2016/03/07 PHP
Yii2单元测试用法示例
2016/11/12 PHP
CI框架入门之MVC简单示例
2016/11/21 PHP
Laravel validate error处理,ajax,json示例
2019/10/25 PHP
一个无限级XML绑定跨框架菜单(For IE)
2007/01/27 Javascript
jQuery对表单元素的取值和赋值操作代码
2011/05/19 Javascript
js自定义鼠标右键的实现原理及源码
2014/06/23 Javascript
Javascript字符串对象的常用方法简明版
2014/06/26 Javascript
理解Javascript图片预加载
2016/02/23 Javascript
Javascript生成带参数的二维码示例
2016/10/10 Javascript
Javascript 详解封装from表单数据为json串进行ajax提交
2017/03/29 Javascript
JS点击缩略图整屏居中放大图片效果
2017/07/04 Javascript
javascript+html5+css3自定义弹出窗口效果
2017/10/26 Javascript
JS实现的JSON数组去重算法示例
2018/04/11 Javascript
Vue动态加载异步组件的方法
2018/11/21 Javascript
google广告之另类js调用实现代码
2020/08/22 Javascript
python中精确输出JSON浮点数的方法
2014/04/18 Python
一个基于flask的web应用诞生 使用模板引擎和表单插件(2)
2017/04/11 Python
点球小游戏python脚本
2018/05/22 Python
pandas计数 value_counts()的使用
2019/06/24 Python
python内置模块collections知识点总结
2019/12/19 Python
Pandas时间序列:重采样及频率转换方式
2019/12/26 Python
pycharm安装及如何导入numpy
2020/04/03 Python
Jupyter Notebook远程登录及密码设置操作
2020/04/10 Python
定义css设备类型-Media Queries图表简介及使用方法
2013/01/21 HTML / CSS
HTML5 SEO优化的一些建议
2020/08/27 HTML / CSS
大三毕业自我鉴定
2014/01/15 职场文书
岗位廉政承诺书
2014/03/27 职场文书
祖国在我心中演讲稿200字
2014/08/28 职场文书
2015年植树节活动总结
2015/02/06 职场文书
2016廉政教育学习心得体会
2016/01/25 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书
高中优秀作文(范文)
2019/08/15 职场文书
python区块链实现简版工作量证明
2022/05/25 Python