1、new 命令的原理
- 创建一个空对象
- 空对象的_proto_指向构造函数的prototype
- 空对象赋值给函数内部的this
- 执行函数内部代码
- 返回这个对象
实现代码如下
function _new( constructor, params) {
var args = [].slice.call(arguments);
var constructor = args.shift();
var context = Object.create(constructor.prototype);
var result = constructor.apply(context, args);
return (typeof result === 'object' && result != null) ? result : context;
}
var actor = _new(Person, '张三', 28);
2、构造函数中使用 return
function Fn() {
this.price = 1000
return 1000
}
function Fn1() {
this.price = 2000
return 'abc'
}
function Fn2() {
this.price = 3000
return {
name: '张三'
}
}
var obj = new Fn()
var obj1 = new Fn1()
var obj2 = new Fn2()