乐趣区

手写系列– new

步骤

用 new Object() 的方式新建了一个对象 obj
取出第一个参数,就是我们要传入的构造函数。此外因为 shift 会修改原数组,所以 arguments 会被去除第一个参数
将 obj 的原型指向构造函数,这样 obj 就可以访问到构造函数原型中的属性
使用 apply,改变构造函数 this 的指向到新建的对象,这样 obj 就可以访问到构造函数中的属性
返回 obj

代码
<!DOCTYPE html>
<html lang=”en”>

<head>
<meta charset=”UTF-8″>
<meta name=”viewport” content=”width=device-width, initial-scale=1.0″>
<meta http-equiv=”X-UA-Compatible” content=”ie=edge”>
<title>Document</title>
</head>

<body>
<script>
function Person(name, age) {
this.name = name;
this.age = age;
this.say = function() {
alert(this.name)
}
}
var p1 = new Person(‘jie’, 12)
p1.say()

function create() {
let obj = new Object();
let Con = [].shift.call(arguments)
obj.__proto__ = Con.prototype;
let ret = Con.apply(obj, arguments)
return ret instanceof Object ? ret : obj
}
var p2 = create(Person, ‘biao’, 22)
p2.say()
</script>
</body>

</html>
注意写错的地方

退出移动版