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 相关文章推荐
图片上传即时显示缩略图的js代码
May 27 Javascript
HTML颜色选择器实现代码
Nov 23 Javascript
jcrop基本参数一览
Jul 16 Javascript
选择器中含有空格在使用示例及注意事项
Jul 31 Javascript
jQuery实现下拉加载功能实例代码
Apr 01 Javascript
jquery把int类型转换成字符串类型的方法
Oct 07 Javascript
JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法
Jan 03 Javascript
前端页面文件拖拽上传模块js代码示例
May 19 Javascript
微信小程序实现注册登录功能(表单校验、错误提示)
Dec 10 Javascript
TypeScript的安装、使用、自动编译的实现
Apr 10 Javascript
微信小程序实现多选框功能的实例代码
Jun 24 Javascript
JavaScript实现alert弹框效果
Nov 19 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
西德产收音机
2021/03/01 无线电
用session做客户验证时的注意事项
2006/10/09 PHP
php实现cookie加密的方法
2015/03/10 PHP
Laravel学习教程之model validation的使用示例
2017/10/23 PHP
jQuery页面滚动浮动层智能定位实例代码
2011/08/23 Javascript
自动设置iframe大小的jQuery代码
2013/09/11 Javascript
千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码
2013/12/05 Javascript
jquery序列化form表单使用ajax提交后处理返回的json数据
2014/03/03 Javascript
nodejs教程之环境安装及运行
2014/11/21 NodeJs
jQuery源码解读之removeClass()方法分析
2015/02/20 Javascript
分享十五款 jQuery 社交网络分享插件
2015/05/16 Javascript
jQuery实现的五子棋游戏实例
2015/06/13 Javascript
js提交form表单,并传递参数的实现方法
2016/05/25 Javascript
jQuery数组处理函数整理
2016/08/03 Javascript
将angular.js项目整合到.net mvc中的方法详解
2017/06/29 Javascript
vue-cli webpack模板项目搭建及打包时路径问题的解决方法
2018/02/26 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
微信小程序项目总结之记账小程序功能的实现(包括后端)
2019/08/20 Javascript
python3利用Dlib19.7实现人脸68个特征点标定
2018/02/26 Python
pygame游戏之旅 添加icon和bgm音效的方法
2018/11/21 Python
pandas 空数据处理方法详解
2019/11/02 Python
python numpy 反转 reverse示例
2019/12/04 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
2020/05/26 Python
Python3如何使用tabulate打印数据
2020/09/25 Python
CSS3属性 line-clamp控制文本行数的使用
2020/03/19 HTML / CSS
新东方旗下远程教育网站:新东方在线
2020/03/19 全球购物
大型活动策划方案
2014/01/12 职场文书
党组织公开承诺书
2014/03/29 职场文书
军训拉歌口号
2014/06/13 职场文书
优秀英文求职信范文
2015/03/19 职场文书
在校证明模板
2015/06/17 职场文书
中学教师读书笔记
2015/07/01 职场文书
2015小学师德工作总结
2015/07/21 职场文书
大学迎新生的欢迎词
2019/06/25 职场文书
JavaWeb 入门:Hello Servlet
2021/07/16 Java/Android
Windows server 2012搭建FTP服务器
2022/04/29 Servers