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);

```

大功告成了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 12,385评论 2 17
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 9,699评论 0 13
  • 一、let 和 constlet:变量声明, const:只读常量声明(声明的时候赋值)。 let 与 var 的...
    dadage456阅读 4,121评论 0 0
  • var a = 1; console.log(typeof a);// 'number' var b = '1';...
    zdnexus阅读 2,713评论 0 0
  • 下回分解及时上线了,话说我们达成约定到最后成行也是一波三折呢!好了具体的过程我也就不赘言了,总之我们顺利会师于乒乓...
    淡之水阅读 2,669评论 0 0