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事件的连接使用示例
Jun 18 Javascript
json格式的时间显示为正常年月日的方法
Sep 08 Javascript
5个JavaScript经典面试题
Oct 13 Javascript
JS中script标签defer和async属性的区别详解
Aug 12 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
Nov 21 Javascript
Bootstrap实现的经典栅格布局效果实例【附demo源码】
Mar 30 Javascript
AngulaJS路由 ui-router 传参实例
Apr 28 Javascript
微信小程序 input表单与redio及下拉列表的使用实例
Sep 20 Javascript
通过jquery.cookie.js实现记住用户名、密码登录功能
Jun 20 jQuery
微信小程序实现时间进度条功能
Nov 17 Javascript
解决vue的router组件component在import时不能使用变量问题
Jul 26 Javascript
AJAX学习笔记
May 18 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获得用户使用的代理服务器ip即真实ip
2006/12/31 PHP
php守护进程 加linux命令nohup实现任务每秒执行一次
2011/07/04 PHP
PHP伪静态Rewrite设置之APACHE篇
2014/07/30 PHP
PHP基于自定义函数生成笛卡尔积的方法示例
2017/09/30 PHP
JS获取屏幕,浏览器窗口大小,网页高度宽度(实现代码)
2013/12/17 Javascript
Bootstrap Modal遮罩弹出层代码分享
2016/11/21 Javascript
使用vue实现点击按钮滑出面板的实现代码
2017/01/10 Javascript
JavaScript中闭包的详解
2017/04/01 Javascript
JavaScript实现隐藏省略文字效果的方法
2017/04/27 Javascript
vue动画打包后失效问题的解决方法
2018/09/18 Javascript
微信小程序ibeacon三点定位详解
2018/10/31 Javascript
实例介绍JavaScript中多种组合继承
2019/01/20 Javascript
详解实现一个通用的“划词高亮”在线笔记功能
2019/04/23 Javascript
RC4文件加密的python实现方法
2015/06/30 Python
Python 爬虫多线程详解及实例代码
2016/10/08 Python
pandas 按照特定顺序输出的实现代码
2018/07/10 Python
Python 窗体(tkinter)按钮 位置实例
2019/06/13 Python
Python爬虫 bilibili视频弹幕提取过程详解
2019/07/31 Python
python+pygame实现坦克大战
2019/09/10 Python
pycharm通过anaconda安装pyqt5的教程
2020/03/24 Python
Django admin管理工具TabularInline类用法详解
2020/05/14 Python
基于selenium及python实现下拉选项定位select
2020/07/22 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
2020/09/29 Python
python 爬虫爬取京东ps4售卖情况
2020/12/18 Python
自我鉴定三原则
2014/01/13 职场文书
护士进修自我鉴定
2014/02/07 职场文书
文明餐桌活动方案
2014/02/11 职场文书
年会搞笑主持词串词
2014/03/24 职场文书
优秀毕业生找工作自荐信
2014/06/23 职场文书
幼儿园秋季开学寄语
2014/08/02 职场文书
最美护士演讲稿
2014/08/27 职场文书
2014离婚协议书范文
2014/09/10 职场文书
保证金退回承诺函格式
2015/01/21 职场文书
撤诉书怎么写
2015/05/19 职场文书
导游词之南京汤山温泉
2019/11/26 职场文书
解决Pytorch dataloader时报错每个tensor维度不一样的问题
2021/05/28 Python