// 原料
function fn(){ //将这个函数中的this改变,指向new新创建的对象
// 加工
this.name = "root";
}
// // 出厂
var f = new fn();//创建了一个新对象
var f2 = new fn();//创建了一个新对象
console.log(f);//fn {name: "root"}
console.log(f2)//fn {name: "root"}
console.log(f == f2)//false
// new的原理:
// 1.创建了一个新的空对象
// 2.将这个对象的__proto__和函数的prototype做连接
// 3.将这个函数中的this改变,指向new新创建的对象
// 4.检测函数有没有返回对象,没有返回对象,就返回new创建的对象
// 工厂模式的模式是什么:
// 设计模式之一:
// 构造函数,构造自定义的函数,会在函数中使用this、找到被构造出来的对象
// 隐患:一旦构造函数被直接执行,会错误的产生大量的全局变量
// 解决隐患:解决不了
// 自我约束:构造函数不要直接执行
// 防止误操作:行业习惯:为了防止构造函数被直接执行,产生大量的全局变量,一般将需要被构造的函数的首字母大写,以此标志构造函数和正常函数的区别
function Fn(){
this.name = "root";
}
var f = new Fn()
console.log(f.name)//root
console.log(name)//空;
长风破浪会有时,直挂云帆济沧海