# new运算符
# new运算符是做什么的
在js中,new
运算符用来实例化对象,如下:
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.walk = function () {
console.log(this.name + ',' + this.age + '岁,会走路!');
}
let tom = new Person('tom', 19);
tom.walk(); // tom,19岁,会走路!
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
我们使用new
运算符实例化了Person
对象tom
,tom
可以访问实例属性和原型链上的方法。
# 实现一个new运算符
# 分解
要想实现一个new运算符,我们就必须弄清楚new
运算符都做了哪些事情,通过上面的例子,我们大致
可以总结new
运算符做了一下几件事情:
- 1、新建一个空对象
obj
let obj = {};
1
- 2、将
obj
对象,作为作用域,执行构造函数
// sup是构造函数
sup.call(obj, ...args);
1
2
2
- 3、将
obj
对象的隐形原型指向构造函数的显性原型
obj.__proto__ = sup.prototype;
1
- 4、返回这个对象
return obj;
1
# 完整代码以及测试
完整代码
function myNew (sup, ...args) {
let obj = {};
sup.call(obj, ...args);
obj.__proto__ = sup.prototype;
return obj;
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
测试结果
let tom2 = myNew(Person, 'tom', 19);
console.log(tom2.name);
console.log(tom2.age);
tom2.walk();
1
2
3
4
2
3
4