JS new关键字的问题


function fn()
{
    this.user = ‘testNew’;
}
var a = new fn;
console.log(a.user); //testNew

function fn()
{
    this.user = ‘testNew’;
}
var a = new fn();
console.log(a.user); //testNew

为什么一样,new的作用到底是什么,为什么第一个fn不执行也可以new一个出来?

阅读 2.6k
4 个回答

这个问题《JavaScript权威指南》8.2.3节已经有详细解释了:
图片描述

一个是原型,一个是实例。

你可以试试分别把a.user的值修改,再console.log(fn.user)就知道了。

这是两个问题,我来回答一哈new干了什么。

function Foo(){
}

var foo =new Foo();
等价于
var o = new Object();
o.[[Prototype]] = Foo.prototype;
Foo.call(o);
新手上路,请多包涵

首先要明白,new是一个运算符。
然后new命令会触发三个动作:
1:创建一个新的空对象
2:把这个空对象作为参数传递给构造函数,这个参数就是this,也就是函数上下文,传递过程是隐式的,然后执行构造函数,也可以看成给这个空对象构造的过程
3:返回这个新构造的对象

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题