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 相关文章推荐
firefox浏览器下javascript 拖动层效果与原理分析代码
Dec 04 Javascript
javascript 当前日期转化为中文的实现代码
May 13 Javascript
子窗口、父窗口和Silverlight之间的相互调用
Aug 16 Javascript
js 如何实现对数据库的增删改查
Nov 23 Javascript
Jquery Ajax xmlhttp请求成功问题
Feb 04 Javascript
JavaScript中const、var和let区别浅析
Oct 11 Javascript
JavaScript中关键字 in 的使用方法详解
Oct 17 Javascript
jQuery实现根据生日计算年龄 星座 生肖
Nov 23 Javascript
vue插槽slot的简单理解与用法实例分析
Mar 14 Javascript
Vue实现图片轮播组件思路及实例解析
May 11 Javascript
JS call()及apply()方法使用实例汇总
Jul 11 Javascript
JS实现简易日历效果
Jan 25 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
Zend的Registry机制的使用说明
2013/05/02 PHP
php实现图片文件与下载文件防盗链的方法
2014/11/03 PHP
PHP中使用xmlreader读取xml数据示例
2014/12/29 PHP
PHP易混淆知识整理笔记
2015/09/24 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
2016/10/09 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
2017/06/07 PHP
THREE.JS入门教程(1)THREE.JS使用前了解
2013/01/24 Javascript
微信JS接口汇总及使用详解
2015/01/09 Javascript
jQuery代码实现表格中点击相应行变色功能
2016/05/09 Javascript
JavaScript设计模式开发中组合模式的使用教程
2016/05/18 Javascript
浅谈JavaScript变量的自动转换和语句
2016/06/12 Javascript
vue实现的上传图片到数据库并显示到页面功能示例
2018/03/17 Javascript
vue实现简单的MVVM框架
2018/08/05 Javascript
JavaScript设计模式之职责链模式应用示例
2018/08/07 Javascript
JavaScript引用类型之基本包装类型实例分析【Boolean、Number和String】
2018/08/09 Javascript
react实现换肤功能的示例代码
2018/08/14 Javascript
使用pm2自动化部署node项目的方法步骤
2019/01/28 Javascript
JS开发常用工具函数(小结)
2019/07/04 Javascript
js计算最大公约数和最小公倍数代码实例
2019/09/11 Javascript
JavaScript onclick事件使用方法详解
2020/05/15 Javascript
Python map和reduce函数用法示例
2015/02/26 Python
Python弹出输入框并获取输入值的实例
2019/06/18 Python
python实现京东订单推送到测试环境,提供便利操作示例
2019/08/09 Python
python 画图 图例自由定义方式
2020/04/17 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
2020/06/01 Python
CSS3实现头像旋转效果
2017/03/13 HTML / CSS
H5 meta小结(前端必看篇)
2016/08/24 HTML / CSS
英国体育器材进口商店:UK Sport Imports
2017/03/14 全球购物
巴黎欧莱雅法国官网:L’Oreal Paris
2019/04/30 全球购物
世界上最伟大的马产品:Equiderma
2020/01/07 全球购物
5.1手机促销活动
2014/01/17 职场文书
2014年党支部承诺书
2014/05/30 职场文书
大学新闻系应届生求职信
2014/06/02 职场文书
2014党员学习习主席讲话思想汇报
2014/09/15 职场文书
公务员年度个人总结
2015/02/12 职场文书
2016年小学生寒假家长评语
2015/10/10 职场文书