gpt4 book ai didi

Javascript 构造函数 - 什么时候发生错误?

转载 作者:行者123 更新时间:2023-11-30 09:13:27 25 4
gpt4 key购买 nike

你好!在 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 是具有这种行为的仅有的两个可能值吗?

最佳答案

My question is: Are null and undefined the only two possible values with such behaviour?

默认情况下,是的,因为如果对象或其任何原型(prototype)上不存在某个属性,您将获得值 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);

关于Javascript 构造函数 - 什么时候发生错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56858724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com