functionFoo(){this.name ='yang';return111;//--->Foo {name :'yang'} 返回的是值类型忽略return[1,2,3];// --->[1,2,3] 返回的是引用类型,new不起作用}console.log(newFoo());//console.log(Foo.prototype = new Foo().__proto__);//true
2.模拟new操作符的实现
functionFun(age, name){this.name = name;this.age = age;}//模拟new操作符functioncreate(fn,...args){//...args为参数数组//1.创建一个空对象var obj ={};//2.将空对象的原型指向构造函数的原型Object.setPrototypeOf(obj, fn.prototype);//3.将空对象作为构造函数上下文(改变this指向)//调用构造函数fn,并将this指向obj,将参数args传给fn//result为函数执行完的值(构造函数的返回值)var result =fn.apply(obj, args);console.log(result);//4.对构造函数返回值进行处理判断return result instanceofObject? result : obj;}console.log(create(Fun,"Tom",20));
二、字面量
const obj ={key1: value1,key2: value2,method(){// 方法体}};//举例:const person ={name:"Alice",age:25,greet(){console.log("Hello, my name is "+this.name);}};person.greet();// 输出: Hello, my name is Alice