javascript new 的时候为什么会执行构造函数

水墨寒
  • 1.1k

见代码

    function MyClass() {
        console.log('Initialized!');
        //Set a property, as an example
        this.dirty = true;
    }

    var instance = new MyClass;

MyClass 会被执行 控制台会有输出

回复
阅读 5.2k
5 个回答
✓ 已被采纳

new 这个关键字 在c++/java/javascript里被用来创建新的对象实例, 一般来说, 它做如下两件事:

1. 给 对象实例 分配内存(堆中?);
2. 调用 构造函数 初始化 1中返回的内存.
Lsong
  • 1
新手上路,请多包涵

new 关键字实际上就是调用了 MyClass 这个函数并返回 this 指针 .

Goodsu
  • 84

有些大侠们,总结了下 new+构造函数 至少做了4件事,基本思路如下:
这样按照第三点来说的话,会有MyClass.call(obj)发生,所以会执行Myclass().

// new Base();

// 1.创建一个空对象 obj
var obj = {};
// 2.设置obj的proto为原型
obj.proto = Base.prototype;
// 3.使用obj作为上下文调用Base函数
var ret = Base.call(obj);
// 4.如果构造函数返回的是原始值,那么这个返回值会被忽略,如果返回的是对象,就会覆盖构造的实例
if(typeof ret == 'object'){
return ret;
} else {
return obj;
}

首先Myclass是一个函数,当你使用new关键字的时候Myclass被当做了构造函数:当MyClass中包含return的时候 且return的是一个对象而不是number这样的值,则会返回return后的对象,return后不是对象,则被忽略,返回的是Myclass中的this对象。

MayEnjoy
  • 1
新手上路,请多包涵

new 解释执行的时候,首先会先创建一个空的functon object对象,然后这个创建好的对象再去解析MyClass的函数体,就会在其中为那个空的函数对象做初始化,这时候this指的就是你新创建的js函数对象。

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