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控制frame,iframe的src属性代码
Dec 31 Javascript
jquery 新浪网易的评论块制作
Jul 01 Javascript
javascript错误的认识不用关心内存管理
Dec 15 Javascript
jQuery的live()方法对hover事件的处理示例
Feb 27 Javascript
js的touch事件的实际引用
Oct 13 Javascript
详解Matlab中 sort 函数用法
Mar 20 Javascript
JS未跨域操作iframe里的DOM
Jun 01 Javascript
Bootstrap与Angularjs的模态框实例代码
Aug 03 Javascript
VUE + UEditor 单图片跨域上传功能的实现方法
Feb 08 Javascript
再谈Angular4 脏值检测(性能优化)
Apr 23 Javascript
Vue组件实现触底判断
Jun 26 Javascript
layui清空,重置表单数据的实例
Sep 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数据类型之布尔型的介绍
2013/04/28 PHP
PHP数组排序函数合集 以及它们之间的联系分析
2013/06/27 PHP
php-fpm配置详解
2014/02/12 PHP
PHP对象、模式与实践之高级特性分析
2016/12/08 PHP
php根据地址获取百度地图经纬度的实例方法
2019/09/03 PHP
laravel中Redis队列监听中断的分析
2020/09/14 PHP
二级域名或跨域共享Cookies的实现方法
2008/08/07 Javascript
Jquery Autocomplete 结合asp.net使用要点
2010/10/29 Javascript
js 手机号码合法性验证代码集合
2012/09/29 Javascript
一步步教大家编写酷炫的导航栏js+css实现
2016/03/14 Javascript
对于input 框限定输入值为浮点型的js代码
2017/09/25 Javascript
C#实现将一个字符转换为整数
2017/12/12 Javascript
vue 项目如何引入微信sdk接口的方法
2017/12/18 Javascript
详解ES6语法之可迭代协议和迭代器协议
2018/01/13 Javascript
JS实现获取word文档内容并输出显示到html页面示例
2018/06/23 Javascript
解决angularjs中同步执行http请求的方法
2018/08/13 Javascript
vue实现的树形结构加多选框示例
2019/02/02 Javascript
AngularJS实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 Javascript
原生js实现贪食蛇小游戏的思路详解
2019/11/26 Javascript
vue 导航守卫和axios拦截器有哪些区别
2020/12/19 Vue.js
Python3 入门教程 简单但比较不错
2009/11/29 Python
Python回文字符串及回文数字判定功能示例
2018/03/20 Python
Flask-Mail用法实例分析
2018/07/21 Python
python使用paramiko实现ssh的功能详解
2020/03/06 Python
keras中的backend.clip用法
2020/05/22 Python
在keras 中获取张量 tensor 的维度大小实例
2020/06/10 Python
基于Keras的格式化输出Loss实现方式
2020/06/17 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
2021/01/29 Python
LivingSocial英国:英国本地优惠
2019/02/22 全球购物
是什么让J2EE适合用来开发多层的分布式的应用
2015/01/16 面试题
党性锻炼的心得体会
2014/09/03 职场文书
基层干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2014年班主任工作总结
2014/11/08 职场文书
教师研修随笔感言
2015/11/18 职场文书
2019 入党申请书范文
2019/07/10 职场文书
nginx服务器的下载安装与使用详解
2021/08/02 Servers