//HUman人类的是安全的构造函数
function Human(name,sex,age){
if(this === window){
return new Human(name,sex,age)
}else{
this.name = name;
this.sex = sex;
this.age = age;
}
}
var h1 = New(Human , "张三" , "男" , 18);
console.log(h1);
function New(constructor){//constructor构建者 = Human
/*
1.创建一个新对象
2.把Human复制一遍
3.修改原型对象,记录了构建者
4.return 新对象
*/
/*
:params constructor : 传入一个构造函数对象
不确定的参数 arguments [Human ,[ "张三" , "男" , 18]
实参的长度 arguments.length 4
形参的长度 New.length 1
arguments是伪数组,不能使用slice
*/
var newObject = {};
var args = Array.prototype.slice.call(arguments,New.length); //[ "张三" , "男" , 18]
//apply 和 call 的作用一样
//call(obj,arg1,arg2)
//apply(obj,[arg1,arg2])
/*
this ===> newObject
else{//对象赋值
newObject.name = name;
newObject.sex = sex;
newObject.age = age;
}
*/
constructor.apply(newObject,args);
/*
构造函数对象的 引用对象 : newObject.__proto__(原型对象)
构造函数的原型对象写法 : constructor.prototype
*/
newObject.__proto__ = constructor.prototype;
return newObject
}
JS new的使用和具体体现
最新推荐文章于 2024-08-22 14:32:34 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)