美文网首页
js基础-new关键字

js基础-new关键字

作者: kruz | 来源:发表于2019-06-27 13:35 被阅读0次

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

js new关键字的作用可以用下面的步骤大致列举一下:

  1. 创建一个空对象obj
  2. 将obj的 _proto_ 属性设置成构造函数的 prototype
  3. 将构造函数绑定这个变量执行
  4. 返回这个对象
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','2019');
console.log(my.name);
console.log(my.time);
console.log(typeof my);
console.log(my instanceof MyClass);

为什么要用new呢?

new可以实现继承链,new也可以共享原型链节省内存空间

如下一段代码

function Person(name){
    this.name = name;
}
Person.prototype.sayName = function(){
   console.log(this.name)
}

var p1 = new Person('zhangsan');
var p2 = new Person('lisi');

console.log(p1.sayName == Person.prototype.sayName); // true
console.log(p2.sayName == Person.prototype.sayName);// true
console.log(p1.sayName());
console.log(p2.sayName());

可以到p1 和 p2 的sayName函数和 Person.prototype.sayName相等的,实际上是一个函数,就算你new无数个Person对象,sayName函数还是同一份。

相关文章

  • js基础-new关键字

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

  • js学习札记-new关键字

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

  • 简单案例来看JS中的面向对象

    在JS中,一般情况下我们都是直接写函数,直接调用,但是发现JS中也有new关键字,那么new关键字作为创建对象的关...

  • 源码时代前端干货分享|new关键字底层原理-执行过程

    构造对象关键字:new 众所周知,js是用new来产生对象的,那么今天我们就来说说js里new产生对象的构造原理。...

  • JS 手写 new

    new 关键字作用 众所周知,js 中 new 关键字的作用就是创建一个构造函数的实例对象 如以下构造函数,使用 ...

  • JavaScript 的new关键字理解

    当我还是一个js初学者的时候总是忽视了new关键字的作用,也不理解new关键字在程序语言总取到的作用。只是知道js...

  • 2016.12.1 JS

    日期时间对象 var date=new Date() new:关键字 作用:创建对象 Date是个js内置的构造...

  • 创建对象

    js中没有类这个概念,与之对应的叫做对象。 new关键字相当于class关键字 js中,类和函数都是使用funct...

  • 面试总结之基础篇(1)

    深拷贝与浅拷贝 原型与原型链 防抖节流 this 指向 new关键字 深度剖析js闭包

  • 2021年前端面试题 中级前端!

    new Vue()中发生了什么?new关键字在js语言中代表实例化一个对象,源码可以看到vue类中非常干净,只是执...

网友评论

      本文标题:js基础-new关键字

      本文链接:https://www.haomeiwen.com/subject/tlwlcctx.html