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 相关文章推荐
JQuery 获得绝对,相对位置的坐标方法
Feb 09 Javascript
js中更短的 Array 类型转换
Oct 30 Javascript
用JQUERY增删元素的代码
Feb 14 Javascript
原生javascript实现拖动元素示例代码
Sep 01 Javascript
jQuery获取URL请求参数的方法
Jul 18 Javascript
JS实现不使用图片仿Windows右键菜单效果代码
Oct 22 Javascript
BootStrap+Mybatis框架下实现表单提交数据重复验证
Mar 23 Javascript
vue.js实例todoList项目
Jul 07 Javascript
Angularjs自定义指令实现分页插件(DEMO)
Sep 16 Javascript
AngularJS遍历获取数组元素的方法示例
Nov 11 Javascript
Vue实现根据hash高亮选项卡
May 27 Javascript
浅谈在vue-cli3项目中解决动态引入图片img404的问题
Aug 04 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简单系统数据添加以及数据删除模块源文件下载
2008/06/07 PHP
PHP删除目录及目录下所有文件的方法详解
2013/06/06 PHP
php empty()与isset()区别的详细介绍
2013/06/17 PHP
php preg_replace替换实例讲解
2013/11/04 PHP
PHP实现HTML生成PDF文件的方法
2014/11/07 PHP
php操作redis缓存方法分享
2015/06/03 PHP
WordPress的主题编写中获取头部模板和底部模板
2015/12/28 PHP
ThinkPHP3.2.1图片验证码实现方法
2016/08/19 PHP
Yii2 批量插入、更新数据实例
2017/03/15 PHP
PHP保存Base64图片base64_decode的问题整理
2019/11/04 PHP
php+mysql实现的无限分类方法类定义与使用示例
2020/05/27 PHP
Javascript Object.extend
2010/05/18 Javascript
JavaScript 拾碎[三] 使用className属性
2010/10/16 Javascript
javascript验证只能输入数字和一个小数点示例
2013/10/21 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
JavaScript异步加载浅析
2014/12/28 Javascript
总结jQuery插件开发中的一些要点
2016/05/16 Javascript
JS判断字符串变量是否含有某个字串的实现方法
2016/06/03 Javascript
JS动态给对象添加属性和值的实现方法
2016/10/21 Javascript
浅谈jQuery绑定事件会叠加的解决方法和心得总结
2016/10/26 Javascript
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
2016/11/30 Javascript
JS之if语句对接事件动作逻辑(详解)
2017/06/28 Javascript
vue-cli脚手架的安装教程图解
2018/09/02 Javascript
vscode配置vue下的es6规范自动格式化详解
2019/03/20 Javascript
kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.
2019/09/17 Javascript
vue vant Area组件使用详解
2019/12/09 Javascript
Python数据类型之Tuple元组实例详解
2019/05/08 Python
美国独家设计师眼镜在线光学商店:Glasses Gallery
2017/12/28 全球购物
Otticanet澳大利亚:最顶尖的世界名牌眼镜, 能得到打折季的价格
2018/08/23 全球购物
村干部群众路线教育活动对照检查材料
2014/10/01 职场文书
2015新员工试用期工作总结
2014/12/12 职场文书
2014社区健康教育工作总结
2014/12/16 职场文书
商务英语求职信范文
2015/03/19 职场文书
二审答辩状格式
2015/05/22 职场文书
pandas 操作 Excel操作总结
2021/03/31 Python
Python+OpenCV实现图片中的圆形检测
2022/04/07 Python