做了什么?
1.创建一个空的对象
2.将空对象的原型指向构造函数的原型
3.将空对象作为构造函数的上下文(改变this指向)
4.对构造函数返回
代码
function Foo() {
console.log(this);
this.name = "张三";
return [1, 2, 3];
}
const f = new Foo();
console.log(f); //空对象 Foo{}
console.log(Foo.prototype == f.__proto__); //原型 true
Foo(); //指向Window
new Foo(); //指向函数本身
console.log(new Foo()); //返回值为基本类型,忽略返回值,返回值为引用类型new就不管事了,返回引用类型
手写函数实现new操作符
function Fun(age, name) {
this.age = age;
this.name = name;
}
function created(fun, ...args) {
var obj = {}; //创建空对象
Object.setPrototypeOf(obj, fun.prototype); //将空对象的原型指向构造函数的原型
var result = fun.apply(obj, args); //空对象的作为构造函数的上下文
return result instanceof Object ? result : obj; //返回值为基本类型,忽略返回值,返回值为引用类型new就不管事了,返回引用类型
}
console.log(created(Fun, 18, "张三"));
标签:console,log,JavaScript,操作符,返回值,new,Foo,构造函数
From: https://blog.csdn.net/m0_73351190/article/details/145148347