javascript new 的时候为什么会执行构造函数
怪我咯
怪我咯 2017-04-10 14:40:04
[JavaScript讨论组]

见代码

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

    var instance = new MyClass;

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

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(5)
黄舟

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

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

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

伊谢尔伦

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

PHP中文网

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

伊谢尔伦

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号