JavaScript-javascript中使用new与不使用实例化对象有什么区别?

WP主题Bug提交 WP主题Bug提交 主题:1067 回复:2226

JavaScript-javascript中使用new与不使用实例化对象有什么区别?

灵芸 发布于 2017-09-12 字数 154 浏览 1039 回复 4
function Me(name,age,job){
this.name = name;
this.age = age;
this.job = job;
}

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(4

虐人心 2017-10-29 4 楼

new关键字以构造函数为模板创建了一个新的对象,它复制了构造器中的成员变量,同时继承了构造器的原型。而

 var alice = new Me('alice', 18, 'Coder');

,只是将Me函数的运行结果赋给了alice,并没有实例化

浮生未歇 2017-10-17 3 楼

第一种是构造函数式,即通过new运算符调用构造函数Function来创建函数
第二种不是实例化,只是调用函数把返回值赋给变量。

偏爱自由 2017-10-06 2 楼

可能是用new后会新生成一个对象,而不用new的话相对于单例模式,有对象就修改,没对象就生成一个,不知道对不对,凭经验感觉的

清晨说ぺ晚安 2017-09-25 1 楼

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——当前的上下文。

要不然就返回任意非原始类型的值.