JavaScript构造函数 - 何时发生错误



光!在JavaScript中,几乎任何值都可以成功地检索其constructor

console.log((33).constructor); // Number
console.log((false).constructor); // Boolean
console.log(('hello').constructor); // String
console.log(({}).constructor); // Object
console.log(([]).constructor); // Array
console.log((v => v).constructor); // Function

我也知道您可以举办一个实例没有constructor属性的类:

let O = function(){};
O.prototype = Object.create(null);
console.log((new O()).constructor)); // undefined

我在这里感兴趣的是,当试图检索其构造函数时会导致错误。我只知道两个这样的值:

console.log((null).constructor); // TypeError!
console.log((undefined).constructor); // TypeError!

我的问题是: nullundefined仅有两个具有此类行为的可能值?

我的问题是:无效和未定义的仅有的两个可能具有这种行为的值?

默认情况下,是的,因为如果对象或其任何原型上不存在属性,则获得值undefinednullundefined投掷的原因是您无法尝试从中获取属性。它们是当您尝试从中获取财产时唯一以这种方式行为的事情。

但是,当您获得constructor属性时,任何对象都可以是直接丢弃错误:

const o = {
  get constructor() {
    throw new Error("Don't do that!");
  }
};
console.log(o.constructor);

或使用陷阱阻止它的代理:

const o = new Proxy({}, {
  get(target, propName, receiver) {
    if (propName === "constructor") {
      throw new Error("Don't do that!");
    }
    return Reflect.get(target, propName, receiver);
  }
});
console.log(o.constructor);

最新更新