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实现浏览器菜单命令
Sep 05 Javascript
jQuery之$(document).ready()使用介绍
Apr 05 Javascript
js中通过split函数分割字符串成数组小例子
Sep 21 Javascript
js简单实现根据身份证号码识别性别年龄生日
Nov 29 Javascript
完美实现仿QQ空间评论回复特效
May 06 Javascript
jQuery遮罩层效果实例分析
Jan 14 Javascript
Vue.js 表单校验插件
Aug 14 Javascript
javascript垃圾收集机制的原理分析
Dec 08 Javascript
jQuery事件对象的属性和方法详解
Sep 09 jQuery
JS实现的汉字与Unicode码相互转化功能分析
May 25 Javascript
vue-for循环嵌套操作示例
Jan 28 Javascript
javascript Canvas动态粒子连线
Jan 01 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
优化NFR之一 --MSSQL Hello Buffer Overflow
2006/10/09 PHP
用PHP编程开发“虚拟域名”系统
2006/10/09 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
2014/11/18 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
PHP中define() 与 const定义常量的区别详解
2019/06/25 PHP
关于使用runtimeStyle属性问题讨论文章
2007/03/08 Javascript
JavaScript自定义DateDiff函数(兼容所有浏览器)
2012/03/01 Javascript
js实现幻灯片播放图片示例代码
2013/11/07 Javascript
javascript:FF/Chrome与IE动态加载元素的区别说明
2014/01/26 Javascript
javascript实现base64 md5 sha1 密码加密
2015/09/09 Javascript
Javascript获取图片原始宽度和高度的方法详解
2016/09/20 Javascript
JS设置随机出现2个数字的实例代码
2017/07/19 Javascript
react实现菜单权限控制的方法
2017/12/11 Javascript
layui实现点击按钮给table添加一行
2018/08/10 Javascript
React事件处理的机制及原理
2018/12/03 Javascript
详解Vue.js中引入图片路径的几种方式
2019/06/17 Javascript
JS画布动态实现黑客帝国背景效果
2020/11/08 Javascript
Python中的pprint折腾记
2015/01/21 Python
CentOS中使用virtualenv搭建python3环境
2015/06/08 Python
Python下载网络文本数据到本地内存的四种实现方法示例
2018/02/05 Python
python: 判断tuple、list、dict是否为空的方法
2018/10/22 Python
详解python中的time和datetime的常用方法
2019/07/08 Python
基于python求两个列表的并集.交集.差集
2020/02/10 Python
Django配置跨域并开发测试接口
2020/11/04 Python
JINS眼镜官方网站:日本最大的眼镜邮购
2016/10/14 全球购物
匡威荷兰官方网站:Converse荷兰
2018/10/24 全球购物
在购买印度民族服饰:Soch
2020/09/15 全球购物
举例说明类变量和实例变量的区别
2016/06/30 面试题
网络工程师专家职业发展路线
2014/02/14 职场文书
超市理货员岗位职责
2014/07/04 职场文书
防灾减灾日活动总结
2014/08/26 职场文书
研究生简历自我评
2015/03/11 职场文书
欢迎新生标语2015
2015/07/16 职场文书
python 如何执行控制台命令与操作剪切板
2021/05/20 Python
AJAX实现指定部分页面刷新效果
2021/10/16 Javascript
tp5使用layui实现多个图片上传(带附件选择)的方法实例
2021/11/17 PHP