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 相关文章推荐
jQuery1.5.1 animate方法源码阅读
Apr 05 Javascript
仅IE6/7/8中innerHTML返回值忽略英文空格的问题
Apr 07 Javascript
JQuery设置文本框和密码框得到焦点时的样式
Aug 30 Javascript
javascript继承机制实例详解
Nov 20 Javascript
使用jquery动态加载js文件的方法
Dec 24 Javascript
教你使用javascript简单写一个页面模板引擎
May 05 Javascript
基于jQuery ligerUI实现分页样式
Sep 18 Javascript
使用get方式提交表单在地址栏里面不显示提交信息
Feb 21 Javascript
JS去掉字符串前后空格、阻止表单提交的实现代码
Jun 08 Javascript
微信小程序入口场景的问题集合与相关解决方法
Jun 26 Javascript
JavaScript实现模态对话框实例
Jan 13 Javascript
vue props 单项数据流实例分享
Feb 16 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过程中的一些注意点的总结
2013/10/25 PHP
PHP生成唯一订单号的方法汇总
2015/04/16 PHP
PHP CURL 多线程操作代码实例
2015/05/13 PHP
php正则修正符用法实例详解
2016/12/29 PHP
/etc/php-fpm.d/www.conf 配置注意事项
2017/02/04 PHP
一些技巧性实用js代码小结
2009/10/14 Javascript
JavaScript中的变量作用域介绍
2014/12/31 Javascript
jquery实现增加删除行的方法
2015/02/03 Javascript
浅谈Javascript数组索引
2015/07/29 Javascript
利用Angularjs和原生JS分别实现动态效果的输入框
2016/09/01 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
JavaScript中三种常见的排序方法
2017/02/24 Javascript
ionic实现底部分享功能
2017/05/11 Javascript
你点的 ES6一些小技巧,请查收
2018/04/25 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
2020/03/31 Javascript
python操作mongodb根据_id查询数据的实现方法
2015/05/20 Python
Python操作串口的方法
2015/06/17 Python
Python 描述符(Descriptor)入门
2016/11/20 Python
好的Python培训机构应该具备哪些条件
2018/05/23 Python
详解python的argpare和click模块小结
2019/03/31 Python
Python socket模块实现的udp通信功能示例
2019/04/10 Python
python接口自动化(十六)--参数关联接口后传(详解)
2019/04/16 Python
在matplotlib中改变figure的布局和大小实例
2020/04/23 Python
Maison Lab荷兰:名牌Outlet购物
2018/08/10 全球购物
NOTINO英国:在线购买美容和香水
2020/02/25 全球购物
牛津在线药房:Oxford Online Pharmacy
2020/11/16 全球购物
大三在校生电子商务求职信
2013/10/29 职场文书
银行柜员应聘推荐信范文
2013/11/24 职场文书
测试工程师岗位职责
2013/11/28 职场文书
女方回门宴答谢词
2014/01/14 职场文书
干部培训自我鉴定
2014/01/22 职场文书
职工运动会邀请函
2014/02/02 职场文书
师说教学反思
2014/02/07 职场文书
临时用工协议书范本
2014/10/29 职场文书
2014年转正工作总结
2014/11/08 职场文书
制作能在nginx和IIS中使用的ssl证书
2021/06/21 Servers