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 相关文章推荐
Javascript中Eval函数的使用
Mar 23 Javascript
基于jquery的表格排序
Sep 11 Javascript
页面只能打开一次Cooike如何实现
Dec 04 Javascript
jquery实现图片翻页效果
Dec 23 Javascript
简述jQuery ajax的执行顺序
Jan 05 Javascript
JS获取浮动(float)元素的style.left值为空的快速解决办法
Feb 19 Javascript
移动端手指放大缩小插件与js源码
May 22 Javascript
快速搭建React的环境步骤详解
Nov 06 Javascript
Vue基础学习之项目整合及优化
Jun 02 Javascript
微信小程序如何修改radio和checkbox的默认样式和图标
Jul 24 Javascript
微信小程序自定义tabBar在uni-app的适配详解
Sep 30 Javascript
React forwardRef的使用方法及注意点
Jun 13 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
php设计模式 Bridge (桥接模式)
2011/06/26 PHP
php 带逗号千位符数字的处理方法
2012/01/10 PHP
php中apc缓存使用示例
2013/12/25 PHP
PHP+Mysql+jQuery文件下载次数统计实例讲解
2015/10/10 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
jquery获得下拉框值的代码
2011/08/13 Javascript
基于jquery的web页面日期格式化插件
2011/11/15 Javascript
jQuery实现简单的日期输入格式化控件
2015/03/12 Javascript
浅谈jQuery中的事件
2015/03/23 Javascript
[原创]JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】
2016/11/01 Javascript
javascript中神奇的 Date对象小结
2017/10/12 Javascript
node的process以及child_process模块学习笔记
2018/03/06 Javascript
微信小程序中遇到的iOS兼容性问题小结
2018/11/14 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
2019/03/29 Javascript
JavaScript Array对象使用方法解析
2019/09/24 Javascript
重置Redux的状态数据的方法实现
2019/11/18 Javascript
nodeJs项目在阿里云的简单部署
2020/11/27 NodeJs
[36:29]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs TNC
2018/04/02 DOTA
[44:33]EG vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python天气预报采集器实现代码(网页爬虫)
2012/10/07 Python
Python中集合的内建函数和内建方法学习教程
2015/08/19 Python
利用nohup来开启python文件的方法
2019/01/14 Python
Python Tkinter 简单登录界面的实现
2019/06/14 Python
解决pyecharts在jupyter notebook中使用报错问题
2020/04/23 Python
django之状态保持-使用redis存储session的例子
2019/07/28 Python
numpy求平均值的维度设定的例子
2019/08/24 Python
python 多进程并行编程 ProcessPoolExecutor的实现
2019/10/11 Python
python两个_多个字典合并相加的实例代码
2019/12/26 Python
Python之字典添加元素的几种方法
2020/09/30 Python
python 基于opencv实现高斯平滑
2020/12/18 Python
Allen Edmonds官方网站:一家美国优质男士鞋类及配饰制造商
2019/03/12 全球购物
培训心得体会
2013/12/29 职场文书
公司离职证明范本
2014/01/13 职场文书
乳制品整治工作方案
2014/05/29 职场文书
吃空饷专项整治方案
2014/10/27 职场文书
优秀乡村医生事迹材料(2016精选版)
2016/02/29 职场文书