js学习札记-new关键字

js 的new关键字解析的过程中引擎执行了很多步骤,我们可以自己写一个仿new的函数来实现new关键字。


说js `new` 之前先说说js的构造函数和实例,实例都是构造函数生成的,也就是我们所说的对象,对象的`prototype`又指向了构造函数,这样能实例和构造函数之间能够形成关联,形成了一个 `原型链`,便于实现面向对象的编程。通过原型链可以访问构造函数里定义的属性的方法,这样同时也避免了空间浪费。

我们先来看看 `new` 函数的基本原理:

1.生成一个空对象

2.将空对象的 `prototype` 指向构造函数

3.将构造函数绑定这个对象并执行。

4.返回这个对象

那我们可以写一段代码来模拟一下:

```javascript

function _new(constructor) {

//1 创建空的对象

//2 新对象的prototype指向构造函数

var obj = {

"__proto__": constructor.prototype //必须用这种方式关联原型链

};

constructor.apply(obj,[].splice.call(arguments,1));//将构造函数绑定这个对象并执行

return obj;//返回新对象

}

//构造函数

function MyClass(name,time) {

this.name = name || '';

this.time = time || '';

}

//生成一个实例

var my = _new(MyClass,'kruz_teching','2018');

console.log(my.name);

console.log(my.time);

console.log(typeof my);

console.log(my instanceof MyClass);

```

大功告成了。

你可能感兴趣的:(js学习札记-new关键字)