javascript中使用new与不使用实例化对象的区别


Posted in Javascript onJune 22, 2015

我们先来看个实例

function Me(name,age,job){
  this.name = name;
  this.age = age;
  this.job = job;
}

请问这以下两种实例化对象方式有什么区别呢?

var mefun1 = new Me('fei','20','it');
var mefun2 = Me('fei','20','it');

简单的说

第一种是构造函数式,即通过new运算符调用构造函数Function来创建函数
第二种不是实例化,只是调用函数把返回值赋给变量。

再扩展下

JavaScript 中并没有真正的类,但JavaScript 中有构造函数和new 运算符。构造函数用来给实例对象初始化属性和值。任何JavaScript 函数都可以用做构造函数,构造函数必须使用new 运算符作为前缀来创建新的实例。

new 运算符改变了函数的执行上下文,同时改变了return 语句的行为。实际上,使用new和构造函数很类似于传统的实现了类的语言:

// 实例化一个Me
var alice = new Me('alice', 18, 'Coder');
// 检查这个实例
assert( alice instanceof Me );

构造函数的命名通常使用驼峰命名法,首字母大写,以此和普通的函数区分开来,这是
一种习惯用法。

// 不要这么做!
Me('alice', 18, 'Coder'); //=> undefined

这个函数只会返回undefined,并且执行上下文是window(全局)对象,无意间创建了3个全局变量name,age,job。调用构造函数时不要丢掉new 关键字。

当使用new 关键字来调用构造函数时,执行上下文从全局对象(window)变成一个空的上下文,这个上下文代表了新生成的实例。因此,this 关键字指向当前创建的实例。尽管理解起来有些绕,实际上其他语言内置类机制的实现也是如此。

默认情况下,如果你的构造函数中没有返回任何内容,就会返回this——当前的上下文。

要不然就返回任意非原始类型的值.

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
复制小说文本时出现的随机乱码的去除方法
Sep 07 Javascript
javascript 单例/单体模式(Singleton)
Apr 07 Javascript
javascript 系统文件夹文件操作及参数介绍
Jan 08 Javascript
Js获取数组最大和最小值示例代码
Oct 29 Javascript
jQuery实现tab标签自动切换的方法
Feb 28 Javascript
通过jsonp获取json数据实现AJAX跨域请求
Jan 22 Javascript
Layui弹出层 加载 做编辑页面的方法
Sep 16 Javascript
小谈angular ng deploy的实现
Apr 07 Javascript
小程序Scroll-view上拉滚动刷新数据
Jun 21 Javascript
小程序实现上传视频功能
Aug 18 Javascript
js删除对象中的某一个字段的方法实现
Jan 11 Javascript
Angular性能优化之第三方组件和懒加载技术
May 10 Javascript
浅谈javascript构造函数与实例化对象
Jun 22 #Javascript
jquery分析文本里url或邮件地址为真实链接的方法
Jun 20 #Javascript
jQuery实现文本框输入同步的方法
Jun 20 #Javascript
jQuery实现带滚动导航效果的全屏滚动相册实例
Jun 19 #Javascript
jquery实现的代替传统checkbox样式插件
Jun 19 #Javascript
JQuery实现的图文自动轮播效果插件
Jun 19 #Javascript
移除AngularJS下URL中的#字符的方法
Jun 19 #Javascript
You might like
《星际争霸重制版》兵种对比图鉴
2020/03/02 星际争霸
php用户注册页面利用js进行表单验证具体实例
2013/10/17 PHP
php表单提交与$_POST实例分析
2015/01/26 PHP
Joomla开启SEF的方法
2016/05/04 PHP
利用PHPExcel实现Excel文件的写入和读取
2017/04/26 PHP
JavaScript CSS修改学习第六章 拖拽
2010/02/19 Javascript
JS下拉框内容左右移动效果的具体实现
2013/07/10 Javascript
js 判断计算字符串长度/判断空的简单方法
2013/08/05 Javascript
jQuery中的height innerHeight outerHeight区别示例介绍
2014/06/15 Javascript
js实现按钮颜色渐变动画效果
2015/08/20 Javascript
Bootstrap每天必学之前端开发框架
2015/11/19 Javascript
快速掌握Node.js事件驱动模型
2016/03/21 Javascript
jQuery实现产品对比功能附源码下载
2016/08/09 Javascript
详解JS数据类型的值拷贝函数(深拷贝)
2017/07/13 Javascript
BootStrap 标题设置跨行无效的解决方法
2017/10/25 Javascript
Jquery实现无缝向上循环滚动列表的特效
2019/02/13 jQuery
如何检查一个对象是否为空
2019/04/11 Javascript
微信小程序的注册页面包含倒计时验证码、获取用户信息
2019/05/22 Javascript
微信小程序判断页面是否从其他页面返回的实例代码
2019/07/03 Javascript
Layui 导航默认展开和菜单栏选中高亮设置的方法
2019/09/04 Javascript
解决nuxt页面中mounted、created、watch执行两遍的问题
2020/11/05 Javascript
python进阶教程之异常处理
2014/08/30 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
2018/03/05 Python
快速解决PyCharm无法引用matplotlib的问题
2018/05/24 Python
使用Python抓取豆瓣影评数据的方法
2018/10/17 Python
python中对数据进行各种排序的方法
2019/07/02 Python
python爬虫项目设置一个中断重连的程序的实现
2019/07/26 Python
opencv+python实现均值滤波
2020/02/19 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
SCDKey德国:全球领先的数字游戏市场
2019/04/09 全球购物
大专生自我评价
2014/01/28 职场文书
排查整治工作方案
2014/06/09 职场文书
关爱老人标语
2014/06/21 职场文书
社保缴纳证明申请书
2014/11/03 职场文书
英语教师个人工作总结
2015/02/09 职场文书
2019个人工作自我评价范文(3篇)
2019/09/19 职场文书