zoukankan      html  css  js  c++  java
  • 不使用 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}
  • 相关阅读:
    Ubuntu 12.04 root账户开启及密码重设
    Notepad++ 开启「切分窗口」同时检视、比对两份文件
    第11章 Java异常与异常处理
    第10章 Java类的三大特性之一:多态
    第9章 Java类的三大特性之一:继承
    第8章 Java类的三大特性之一:封装
    第7章 类和对象
    java 经典程序 100 例
    第6章 Java类中的方法
    第5章 Java数组
  • 原文地址:https://www.cnblogs.com/panic404/p/13673729.html
Copyright © 2011-2022 走看看