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 相关文章推荐
Add Formatted Text to a Word Document
Jun 15 Javascript
js封装的textarea操作方法集合(兼容很好)
Nov 16 Javascript
javascript Event对象详解及使用示例
Nov 22 Javascript
jquery制作select列表双向选择示例代码
Sep 02 Javascript
JavaScript输出当前时间Unix时间戳的方法
Apr 06 Javascript
简介JavaScript中Math.LOG10E属性的使用
Jun 14 Javascript
JQuery EasyUI Layout 在from布局自适应窗口大小的实现方法
May 28 Javascript
js实现将json数组显示前台table中
Jan 10 Javascript
详解Node全局变量global模块
Sep 28 Javascript
Vue-router路由判断页面未登录跳转到登录页面的实例
Oct 26 Javascript
vue实现打印功能的两种方法
Sep 07 Javascript
js实现网页随机验证码
Oct 19 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
使用sockets:从新闻组中获取文章(一)
2006/10/09 PHP
php.ini修改php上传文件大小限制的方法详解
2013/06/17 PHP
apache配置虚拟主机的方法详解
2013/06/17 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
2016/12/15 PHP
PHP实现腾讯与百度坐标转换
2017/08/05 PHP
PHP保留两位小数的几种方法
2019/07/24 PHP
一个很酷的拖动层的js类,兼容IE及Firefox
2009/06/23 Javascript
jQuery布局插件UI Layout简介及使用方法
2013/04/03 Javascript
JS对img标签进行优化使用onerror显示默认图像
2014/04/24 Javascript
javascript常用的方法分享
2015/07/01 Javascript
如何防止INPUT按回车自动提交表单FORM
2016/12/06 Javascript
jQuery实现别踩白块儿网页版小游戏
2017/01/18 Javascript
vue.js加载新的内容(实例代码)
2017/06/01 Javascript
js实现多张图片延迟加载效果
2017/07/17 Javascript
10分钟上手vue-cli 3.0 入门介绍
2018/04/04 Javascript
vue1.0和vue2.0的watch监听事件写法详解
2018/09/11 Javascript
JavaScript格式化json和xml的方法示例
2019/01/22 Javascript
微信小程序向Java后台传输参数的方法实现
2020/12/10 Javascript
对django xadmin自定义菜单的实例详解
2019/01/03 Python
python 判断三个数字中的最大值实例代码
2019/07/24 Python
手把手教你pycharm专业版安装破解教程(linux版)
2019/09/26 Python
Python GUI库PyQt5图形和特效样式QSS介绍
2020/02/25 Python
Python正则表达式学习小例子
2020/03/03 Python
html5 跨文档消息传输示例探讨
2013/04/01 HTML / CSS
环保专业大学生职业规划设计
2014/01/10 职场文书
给老婆大人的检讨书
2014/02/24 职场文书
企业党员一句话承诺
2014/05/30 职场文书
学校食堂食品安全责任书
2014/07/28 职场文书
一次性工伤赔偿协议书范本
2014/11/25 职场文书
中考学习决心书
2015/02/04 职场文书
2015年社区流动人口工作总结
2015/05/12 职场文书
花田少年史观后感
2015/06/16 职场文书
七年级英语教学反思
2016/02/15 职场文书
vue实现可以快进后退的跑马灯组件
2022/04/08 Vue.js
Win11开始菜单添加休眠选项
2022/04/19 数码科技
关于MySQL中explain工具的使用
2023/05/08 MySQL