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在textarea光标处插入文本的小例子
Mar 22 Javascript
JavaScript实现的in_array函数
Aug 27 Javascript
javascript的变量、传值、传址、参数之间关系
Jul 26 Javascript
JavaScript实现下拉菜单的显示和隐藏
Jan 05 Javascript
谈谈JavaScript类型系统之Math
Jan 06 Javascript
判断js的Array和Object的实现方法
Aug 29 Javascript
jQuery 遍历map()方法详解
Nov 04 Javascript
微信小程序商城项目之侧栏分类效果(1)
Apr 17 Javascript
Angular resolve基础用法详解
Oct 03 Javascript
laypage.js分页插件使用方法详解
Jul 27 Javascript
js获取url页面id,也就是最后的数字文件名
Sep 25 Javascript
如何用JavaScript学习算法复杂度
Apr 30 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/02 无线电
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
php 判断服务器操作系统的类型
2014/02/17 PHP
PHP 7.0新增加的特性介绍
2017/06/08 PHP
用JS实现一个页面多个css样式实现
2008/05/29 Javascript
js 浮动层菜单收藏
2009/01/16 Javascript
jqPlot Option配置对象详解
2009/07/25 Javascript
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
2010/02/07 Javascript
js 判断checkbox是否选中的实现代码
2010/11/23 Javascript
js DOM 元素ID就是全局变量
2012/09/20 Javascript
javascript改变position值实现菜单滚动至顶部后固定
2013/01/18 Javascript
Jquery中children与find之间的区别详细解析
2013/11/29 Javascript
javascript生成随机数的方法
2014/05/16 Javascript
javascript常用功能汇总
2015/07/05 Javascript
基于JavaScript的操作系统你听说过吗?
2016/01/28 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
2016/11/25 Javascript
微信小程序多列选择器range-key使用详解
2020/03/30 Javascript
详解node服务器中打开html文件的两种方法
2017/09/18 Javascript
jQuery+SpringMVC中的复选框选择与传值实例
2018/01/08 jQuery
JS实现select选中option触发事件操作示例
2018/07/13 Javascript
react项目实践之webpack-dev-serve
2018/09/14 Javascript
微信小程序 自定义复选框实现代码实例
2019/09/04 Javascript
你知道JavaScript Symbol类型怎么用吗
2020/01/08 Javascript
jQuery实现简易QQ聊天框
2020/02/10 jQuery
基于JQuery实现页面定时弹出广告
2020/05/08 jQuery
Python Django使用forms来实现评论功能
2016/08/17 Python
Python引用类型和值类型的区别与使用解析
2017/10/17 Python
Python线程之定位与销毁的实现
2019/02/17 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
2019/02/22 Python
详解基于python的全局与局部序列比对的实现(DNA)
2020/10/07 Python
python实现快速文件格式批量转换的方法
2020/10/16 Python
python wsgiref源码解析
2021/02/06 Python
中国旅游网站:同程旅游
2016/09/11 全球购物
幼儿园小班教学反思
2014/02/02 职场文书
公司委托书范本
2014/04/04 职场文书
英语教师个人总结
2015/02/09 职场文书