this、return、new关键字的个人理解
new关键字
用new操作符创建对象时发生的事情:
(1)创建一个新对象;
(2)将构造函数的作用域赋给新对象(因此this就指向了这个新对象);
(3)执行构造函数中的代码(为这个新对象添加属性和方法);
(4)返回新对象;
通过new操作符后跟构造函数的方式创建的对象(实例),这个对象有一个constructor(构造函数)属性,该属性指向构造函数。
注意:原本的构造函数是window对象的方法,如果不用new操作符而直接调用,那么构造函数的执行对象就 是window,即this指向了window。现在用new操作符后,this就指向了新生成的对象。
①.new能让一个构造函数返回一个新对象而无需return
②.new会让函数体内的this指向这个新对象
③.new会让新对象的原型指向这个构造函数的prototype属性
构造函数也是函数
任何函数,只要通过new操作符来调用,那么它就可以作为构造函数;任何函数,如果不通过new操作符来调用,那它与普通函数并无区别。
(1)当做构造函数调用
var person = new Person("张三",18);
(2)当做普通函数使用
Person("张三",20); //添加到window对象
console.log(window.name); //"张三"
console.log(window.age); //20
构造函数的问题
使用构造函数的主要问题,就是每个方法都要在每个实例上重新创建一次。
return
return,从字面意思来看就是返回,官方定义return语句将终止当前函数并返回当前函数的值;
①.return的是五种简单数据类型:String,Number,Boolean,Null,Undefined。
这种情况下,忽视return值,依然返回this对象。
②.return的是Object。
这种情况下,不再返回this对象,而是返回return