Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

new.target 是什么鬼?(ES6)

  我觉得以后再也不敢称 new 为运算符了!翻规范的时候突然看到有 new.target 这个词法,简直亮瞎双眼。目前这货就 Firefox 41 支持,它的作用是获取当前 new 的目标函数,如果函数不是被 new 执行的则为 undefined。可以用来确保一个函数是被通过 new 来执行的。
  以前写构造器的时候就希望它只能被 new 出来而不能直接调用。于是这么做 var A = function A() {
  if(!(this instanceof A)) throw 'Constructor A requires "new"';
  // ···
};
  然而这依然可以通过 call 或 apply 来调用。比如: var a = A.call(Object.create(A.prototype));   如果有 new.target 就可以解决这个问题,判断 new.target 是否存在可以检查当前函数是不是通过 new 关键字执行的。 var A = function A() {
  if(!new.target) throw 'Constructor A requires "new"';
  // ···
};
  然而 class 关键字本身就已经包含的 new 检查的功能,所以 new.target 更大的意义是用于让构造器知道当前到底 new 的是哪个类。 以下实例代码引用自 MDN new.target class A {
  constructor() {
    console.log(new.target.name);
  }
}

class B extends A { constructor() { super(); } }

var a = new A(); // logs "A"
var b = new B(); // logs "B"

  规范:ES6 sec-meta-properties-runtime-semantics-evaluation
网名:
34.203.245.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^