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

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

见代码

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

    var instance = new MyClass;

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


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

1. 给 对象实例 分配内存(堆中?);
2. 调用 构造函数 初始化 1中返回的内存.

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


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


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


有些大侠们,总结了下 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;
}

【热门文章】
【热门文章】