<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
function Test (name,age){
this.name = name
this.age = age
}
const t = new Test('zs',18)
console.log('t :>> ', t);
console.log('*************************************************');
function CreateNew(){
const Fn = [].shift.call(arguments)
// 创建一个新对象
const obj = new Object()
// 将新对象的__proto__赋值为构造函数的prototype
obj.__proto__ = Fn.prototype
// 构造函数的this指向新对象,并执行代码赋值
const result = Fn.prototype.constructor.apply(obj, [...arguments])
// 如果构造函数返回非空对象,则返回该对象;否则返回新创建的对象
return result instanceof Object ? result : obj
}
const t2 = CreateNew(Test,'lishi',19)
console.log('t2 :>> ', t2);
</script>
</body>
</html>
手写一个new吧!理解下new的执行流程
最新推荐文章于 2024-09-20 11:38:47 发布