开发者社区> 问答> 正文

new 操作符具体干了什么呢?如何实现?

new 操作符具体干了什么呢?如何实现?

展开
收起
请回答1024 2020-04-03 15:27:52 1280 0
2 条回答
写回答
取消 提交回答
  • 有点尴尬唉 你要寻找的东西已经被吃掉啦!

    Javascript的new关键字主要的作用是继承 new一共经历4个阶段 1、创建一个空对象 var obj = new Object(); 2、设置原型链

    此时便建立了obj对象的原型链 obj.proto = Object.prototype; 3、让Func的this指向obj,并执行Func函数体 Object.call(obj); 4、判断Func(构造函数)的返回值类型 return typeof result === 'object'? result : obj;

    构造函数默认return this,不用写,如下 function A(){ this.name = x; // return this; }

    如果构造函数return是基本数据类型: return 1 return "abc"

    则return 后的东西忽略,就是return {}

    如果是return的是引用类型: 则以return的内容为准 function A(){ this.name = x; // 无效
    return {a: 1}; }

    2020-04-03 22:01:46
    赞同 展开评论 打赏
  • // (1)首先创建了一个新的空对象 // (2)设置原型,将对象的原型设置为函数的 prototype 对象。 // (3)让函数的 this 指向这个对象,执行构造函数的代码(为这个新对象添加属性) // (4)判断函数的返回值类型,如果是值类型,返回创建的对象。如果是引用类型,就返回这个引用类型的对象。

    // 实现:

    function objectFactory() { let newObject = null, constructor = Array.prototype.shift.call(arguments), result = null;

    // 参数判断 if (typeof constructor !== "function") { console.error("type error"); return; }

    // 新建一个空对象,对象的原型为构造函数的 prototype 对象 newObject = Object.create(constructor.prototype);

    // 将 this 指向新建对象,并执行函数 result = constructor.apply(newObject, arguments);

    // 判断返回对象 let flag = result && (typeof result === "object" || typeof result === "function");

    // 判断返回结果 return flag ? result : newObject; }

    // 使用方法 // objectFactory(构造函数, 初始化参数)

    2020-04-03 15:28:21
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
当泛型遇上协议 立即下载
数据+算法定义新世界 立即下载
低代码开发师(初级)实战教程 立即下载