我们先来看个实例
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——当前的上下文。
要不然就返回任意非原始类型的值.
以上所述就是本文的全部内容了,希望大家能够喜欢。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
金钱帮资源网 Copyright www.kbjia.com
暂无“javascript中使用new与不使用实例化对象的区别”评论...
更新日志
2024年10月11日
2024年10月11日
- MartinNeu-JohannSebastianBachTriosonatenfrOrgelBWV525-530(2024)[24-44.1]wav
- PC模拟器版《血源》BOSS战演示:圣剑路德维希
- 《地狱即我们》最新实机:叙事、战斗与设计特点
- UP主把《黑神话:悟空》做成了像素游戏!还能用手机玩!
- 梅艳芳.1998-床前明月光【BMG】【WAV+CUE】
- 王识贤.1998-最痛的痛(国)【滚石】【FLAC分轨】
- 谭咏麟.1988-心手相连【宝丽金】【WAV+CUE】
- NewViennaOctetViennaWindSoloists-TheDeccaRecordings(2024)18CD[24-48][FLAC]--10
- 骅梓1996-不要匆忙(正东版)[红星生产社][WAV+CUE]
- 黑月追风1993-黑月追风[波丽佳音][WAV+CUE]
- 《直到黎明:复刻版》PS4&5图形对比:变化有点大
- 《寂静岭2:重制版》发售宣传片 三角头压迫感再临
- B站UP主《黑神话》沙地上笔练书法:撰写“悟空”
- 焦淼《“永恒的旋律”国家大剧院合唱团经典作品音乐会》[320K/MP3][101.62MB]
- 焦淼《“永恒的旋律”国家大剧院合唱团经典作品音乐会》[FLAC/分轨][252.67MB]