• 不使用 new,创建一个实例对象


    首先,理清思路,使用 new 构造函数,会发生以下几个步骤:

    1. 创建一个新对象,这个对象的 _proto_ 属性指向构造函数的 prototype

    2. 此时构造函数执行环境的 this 指向这个新对象

    3. 执行构造函数中的代码,一般是通过 this 给新对象添加新的成员属性或方法

    4. 最后返回这个新对象

    通过函数,写一个实现 new 的功能:

    // func 是构造函数 ...datas 是需要传给构造函数的参数
    function myNew(func, ...datas) {
    // 创建一个空对象,并且指定原型为func.prototype var obj = Object.create(func.prototype);
      // 这一步也可以这么写:
        var obj = {}

        obj._proto_ = func.prototype
    // new构造函数时要执行函数,同时指定this func.call(obj, ...datas);
    // 最后return这个对象 return obj; }

    验证如下:
    function Test(name, age) {
      this.name = name;
      this.age = age;
    }
    
    myNew(Test, '小明', 18);
    // Chrome控制台会输出以下内容
    // Test {name: "小明", age: 18}
     
    通过显式 return 实现无 new 实例化:

    我们可以在构造函数中通过显式return来返回一个自定义的对象,jQuery就是这么做的。

    function Shadow() {
      this.name = 'jack';
      this.age = 18;
    }
    
    function jQuery() {
      return new Shadow();
    }
    
    var obj1 = jQuery();
    console.log(obj1)
    // Chrome控制台会输出以下内容
    // Shadow {name: "jack", age: 18}
    
    
    var obj2 = new jQuery();
    console.log(obj2)
    // Chrome控制台会输出以下内容
    // Shadow {name: "jack", age: 18}
  • 相关阅读:
    Framework 4.0 新关键字dynamic 之我见(二)
    随便歇歇
    最近的一些总结
    一周最新示例代码回顾 (7/16 7/22)
    一周最新示例代码回顾 (5/28–6/3)
    一周最新示例代码回顾 (5/14–5/20)
    一周最新示例代码回顾 (6/25 7/1)
    微软一站式示例代码浏览器本周更新发布
    一周最新示例代码回顾 (6/11 6/17)
    示例代码浏览器5.4功能更新
  • 原文地址:https://www.cnblogs.com/panic404/p/13673729.html
Copyright © 2020-2023  润新知