# 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

我们使用new运算符实例化了Person对象tomtom可以访问实例属性和原型链上的方法。

# 实现一个new运算符

# 分解

要想实现一个new运算符,我们就必须弄清楚new运算符都做了哪些事情,通过上面的例子,我们大致 可以总结new运算符做了一下几件事情:

  • 1、新建一个空对象obj
let obj = {};
1
  • 2、将obj对象,作为作用域,执行构造函数
// sup是构造函数
sup.call(obj, ...args);
1
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

测试结果

let tom2 = myNew(Person, 'tom', 19);
console.log(tom2.name);
console.log(tom2.age);
tom2.walk();
1
2
3
4

new

上次更新: 5/25/2020, 5:50:59 PM