new.target属性_你可能不知道的 new.target

访客4年前黑客资讯984

new 是组织函数天生实例的下令, ES6为 new 下令引入了 new.target属性。这个属性用于确定组织函数是怎么挪用的。在组织函数中, 若是一个组织函数不是通过 new操作符挪用的, new.target会返回 undefined。


使用场景

  • 若是一个组织函数不通过 new 下令天生实例, 就报错提醒

es5中是这样做的:

    function Shape(options) {
        if (this instanceof Shape) {
            this.options = options
        } else {
            // 要么手动给它建立一个实例并返回
            // return new Shape(options)
            
            // 要么提醒
            throw new Error('Shape 组织函数必须使用 new 操作符')
        }
    }

es6中可以这样做:

    function Shape(options) {
        // if (new.target !== 'undefined') {}  必须要在 constructor中使用 new.target, 在这里判断会报错
        
        constructor(options) {
            if (new.target !== 'undefined') {
                this.options = options
            } else {
                throw new Error('必须使用 new 操作符')
            }
        }
    }

以上代码通过 new.target 属性判断返回的是不是undefined即可知道这个组织函数是不是通过 new 操作符挪用

  • 一个组织函数只能用于子类继续, 自身不能 new

new.target这个属性,当子类继续父类会返回子类的组织函数名称

    class Parent {
        constructor() {
            console.log(new.target)
        }
    }
    
    class Child extends Parent {
        constructor() {
            super()
        }
    }
    
    // Child

以上代码 Child子类继续父类, 那么父类组织函数中的 new.target 是子类组织函数的名称。

划定组织函数只能用于继续

    class Zoo {
        constructor() {
            if (new.target === Zoo) throw new Error('Zoo组织函数只能用于子类继续')
        }
    }
    
    const zoo = new Zoo()   // 报错
    
    class Dog extends Zoo {
       constructor() {
           super()
       } 
    }
    
    const dog = new Dog()  // 不报错

相关文章

夜来香有毒吗(夜来香能驱蚊吗)

  夜来香花有毒吗(夜来香花能防蚊吗)夜来香花又称夜香花、夜悠香、夜丁香花、香茅草等,为萝藦科夜来香花属多年生长 藤状盘绕木本植物,那麼夜来香花能防蚊吗?夜来香花有没有毒?   夜来香花枝干长细,夏秋...

五味子多少钱一斤?五味子的功效与作用

五味子多少钱一斤?五味子的功效与作用

五味子别称五梅子、山花椒等,还一种中药,有很高的药用价值。那五味子价格多少钱一斤?五味子有什么功效与作用?下面我们就一起来看一看。 五味子是最早列于神农本草经上品中药,药用价值极高,有强身健体之效,...

回奶的食物有哪些 真正的回奶食物介绍

回奶的食物有哪些 真正的回奶食物介绍

针对纯母乳喂养的母亲而言,多吃回姥姥食材针对人体有协助,提升奶水的食量,很多人会想起母鸡,燕麦片,苋菜这些食材,那麼回奶的食物有什么?回奶食物合理吗?下边我产生详细介绍。 真实的回奶食物详细介绍...

多宝鱼多少钱一斤?教你选购多宝鱼最实用的技

多宝鱼多少钱一斤?教你选购多宝鱼最实用的技

多宝鱼也是属于海鱼的一种,长相还非常的奇特,但是营养价值特别高,生活中很多人喜欢吃。那你会挑选多多宝鱼吗?如果不会就随小编来看看如何选购多宝鱼,了解了解多宝鱼市场价格多少吧。 如何选购多宝鱼...

败血症是白血病吗(白血病和败血症有什么区别)

  败血病是败血症吗(败血症和败血病有什么不同)很多人对败血症并不生疏,一旦说哪一个电视连续剧上有些人得败血症了,那一定是导演分配的,有那样的低谷期,才知道人间真情的弥足珍贵,这个时候便是想衬托一种爱...