function MyClass() {
console.log('Initialized!');
//Set a property, as an example
this.dirty = true;
}
var instance = new MyClass;
MyClass 会被执行 控制台会有输出
黄舟2017-04-10 14:42:04
new 这个关键字 在c++/java/javascript里被用来创建新的对象实例, 一般来说, 它做如下两件事:
1. 给 对象实例 分配内存(堆中?);
2. 调用 构造函数 初始化 1中返回的内存.
ringa_lee2017-04-10 14:42:04
有些大侠们,总结了下 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;
}
PHP中文网2017-04-10 14:42:04
首先Myclass是一个函数,当你使用new关键字的时候Myclass被当做了构造函数:当MyClass中包含return的时候 且return的是一个对象而不是number这样的值,则会返回return后的对象,return后不是对象,则被忽略,返回的是Myclass中的this对象。
伊谢尔伦2017-04-10 14:42:04
new 解释执行的时候,首先会先创建一个空的functon object对象,然后这个创建好的对象再去解析MyClass的函数体,就会在其中为那个空的函数对象做初始化,这时候this指的就是你新创建的js函数对象。