zoukankan      html  css  js  c++  java
  • new.target元属性 | 分别用es5、es6 判断一个函数是否使用new操作符

      函数内部有两个方法 [[call]] 和 [[construct]] (箭头函数没有这个方法),当使用new 操作符时, 函数内部调用 [[construct]], 创建一个新实例,this指向这个实例; 不使用new 操作符时, 函数内部调用 [[call]]

        判断一个函数是否使用new操作符,ES5的方法:

    function Person(name) {
        if (this instanceof Person) {
            this.name = name;
        } else {
            throw new Error("You must use new operator");
        }
    }
    var p = new Person("James"); // ok
    var p = Person("James"); // error
    // 但是可以通过其他方式绕过这种错误
    var notPerson = Person.call(p, "Nicholas"); // works

    ES6 通过new.target 来判断是否使用new,元属性 是指一个提供目标相关额外信息(比如new)的非对象属性。

    function Person(name) {
        if (typeof new.target !== "undefined") {
            this.name = name;
        } else {
            throw new Errow("You must use new operator");
        }
    }
    var p = new Person("James"); // ok
    var notPerson = Person.call(p, "Louis"); // error 

     

  • 相关阅读:
    android如何播放资源文件夹raw中的视频
    android studio添加三方jar包
    golang自动导入postgresql脚本
    xorm使用pgsql的例子
    python安装psycopg2
    制作u盘启动的工具
    codis须知
    redis3.0自带集群配置
    keepalive配置db层的ha的一些注意点
    phalcon安装笔记
  • 原文地址:https://www.cnblogs.com/liujinyu/p/8521576.html
Copyright © 2011-2022 走看看