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 相关文章推荐
JavaScript 自动分号插入(JavaScript synat:auto semicolon insertion)
Nov 04 Javascript
让jQuery与其他JavaScript库并存避免冲突的方法
Dec 23 Javascript
jQuery中:eq()选择器用法实例
Dec 29 Javascript
jQuery菜单插件用法实例
Jul 25 Javascript
JavaScript仿静态分页实现方法
Aug 04 Javascript
Bootstrap的图片轮播示例代码
Aug 31 Javascript
JS自动倒计时30秒后按钮才可用(两种场景)
Aug 31 Javascript
JS实现为排序好的字符串找出重复行的方法
Mar 02 Javascript
JS实现回到页面顶部动画效果的简单实例
May 24 Javascript
JavaScript中的操作符类型转换示例总结
May 30 Javascript
node.js连接mysql与基本用法示例
Jan 05 Javascript
使用Vant完成DatetimePicker 日期的选择器操作
Nov 12 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新手上路(四)
2006/10/09 PHP
PHP 读取和修改大文件的某行内容的代码
2009/10/30 PHP
snoopy 强大的PHP采集类使用实例代码
2010/12/09 PHP
100多行PHP代码实现socks5代理服务器[2]
2016/05/05 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
2018/12/20 PHP
JAVASCRIPT HashTable
2007/01/22 Javascript
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
JavaScript 面向对象之命名空间
2010/05/04 Javascript
JavaScript中的匀速运动和变速(缓冲)运动详细介绍
2012/11/11 Javascript
文件编码导致jquery失效的解决方法
2013/06/26 Javascript
JS实现Enter键跳转及控件获得焦点
2013/08/12 Javascript
使用伪命名空间封装保护独自创建的对象方法
2016/08/04 Javascript
JavaScript数组操作函数汇总
2016/08/05 Javascript
javascript 秒表计时器实现代码
2017/03/09 Javascript
分分钟学会vue中vuex的应用(入门教程)
2017/09/14 Javascript
Angular中的$watch方法详解
2017/09/18 Javascript
BootstrapTable加载按钮功能实例代码详解
2017/09/22 Javascript
bootstrap响应式工具使用详解
2017/11/29 Javascript
JavaScript设计模式之调停者模式实例详解
2018/02/03 Javascript
[55:48]VGJ.S vs TNC Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
[01:21]DOTA2 新英雄 森海飞霞
2020/12/18 DOTA
Python第三方库xlrd/xlwt的安装与读写Excel表格
2017/01/21 Python
pycharm: 恢复(reset) 误删文件的方法
2018/10/22 Python
pycharm 解除默认unittest模式的方法
2018/11/30 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
2018/12/15 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
2019/02/21 Python
Python-while 计算100以内奇数和的方法
2019/06/11 Python
Django框架配置mysql数据库实现过程
2020/04/22 Python
一道SQL面试题
2012/12/31 面试题
出纳员的岗位职责
2014/02/22 职场文书
亲子阅读的活动方案
2014/08/15 职场文书
销售员态度差检讨书
2014/10/26 职场文书
在职证明书模板
2015/06/15 职场文书
CSS3 制作的彩虹按钮样式
2021/04/11 HTML / CSS
Python中可变和不可变对象的深入讲解
2021/08/02 Python
xhunter1.sys可以删除嘛? win11提示xhunter1.sys驱动不兼容解决办法
2022/09/23 数码科技