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 相关文章推荐
asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
Sep 19 Javascript
详谈javascript中的cookie
Jun 03 Javascript
讲解JavaScript的Backbone.js框架的MVC结构设计理念
Feb 14 Javascript
jQuery Mobile 触摸事件实例
Jun 04 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
Aug 01 Javascript
jQuery实现简洁的轮播图效果实例
Sep 07 Javascript
详解Angular 4.x NgIf 的用法
May 22 Javascript
jstree单选功能的实现方法
Jun 07 Javascript
react+redux的升级版todoList的实现
Dec 18 Javascript
详解Require.js与Sea.js的区别
Aug 05 Javascript
js实现黑白div块画空心的图形
Dec 13 Javascript
vue分页器组件编写方法详解
Jun 28 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
详解WordPress中过滤链接与过滤SQL语句的方法
2015/12/18 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
2018/05/21 PHP
Flash对联广告的关闭按钮讨论
2007/01/30 Javascript
Extjs Ajax 乱码问题解决方案
2009/04/15 Javascript
JS面向对象编程之对象使用分析
2010/08/19 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
基于JS模仿windows文件按名称排序效果
2016/06/29 Javascript
深入浅出ES6之let和const命令
2016/08/25 Javascript
Windows环境下npm install 报错: operation not permitted, rename的解决方法
2016/09/26 Javascript
浅谈AngularJs 双向绑定原理(数据绑定机制)
2017/12/07 Javascript
js replace 全局替换的操作方法
2018/06/12 Javascript
Bootstrap Table列宽拖动的方法
2018/08/15 Javascript
小程序云开发初探(小结)
2018/10/24 Javascript
手把手教你使用TypeScript开发Node.js应用
2019/05/06 Javascript
实用Javascript调试技巧分享(小结)
2019/06/18 Javascript
Javascript数组及类数组相关原理详解
2020/10/29 Javascript
Python splitlines使用技巧
2008/09/06 Python
Python3实现连接SQLite数据库的方法
2014/08/23 Python
Python Queue模块详解
2014/11/30 Python
Python中的进程分支fork和exec详解
2015/04/11 Python
python判断给定的字符串是否是有效日期的方法
2015/05/13 Python
python 中的list和array的不同之处及转换问题
2018/03/13 Python
Python 绘图库 Matplotlib 入门教程
2018/04/19 Python
python实现判断一个字符串是否是合法IP地址的示例
2018/06/04 Python
python实现学生通讯录管理系统
2021/02/25 Python
pycharm Tab键设置成4个空格的操作
2021/02/26 Python
俄罗斯三星品牌商店:Samsungstore
2020/04/05 全球购物
为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
2012/12/13 面试题
化学学院毕业生自荐信范文
2013/12/17 职场文书
采购员的工作职责
2013/12/26 职场文书
副科竞争上岗演讲稿
2014/05/12 职场文书
宪法宣传周工作方案
2014/05/26 职场文书
公务员爱岗敬业演讲稿
2014/08/26 职场文书
2014年乡镇妇联工作总结
2014/12/02 职场文书
总结Java对象被序列化的两种方法
2021/06/30 Java/Android
python中 Flask Web 表单的使用方法
2022/05/20 Python