gpt4 book ai didi

javascript - Javascript 中的构造函数属性是否有好的用例?

转载 作者:数据小太阳 更新时间:2023-10-29 06:03:21 24 4
gpt4 key购买 nike

首先,这个问题不是“constructor 属性的作用是什么?” - 关于它到底是什么以及它是如何工作的,有很多很好的文档:它是对创建对象的函数的引用(可能继承自其原型(prototype))。

我更有兴趣了解此属性的常见用例。这在理论上似乎一切都很好,但是您什么时候真正需要对构造您的对象的函数的引用?一些想法是:

  • 也许我想克隆它。我可以再次调用构造函数并且
    获取我的对象的另一个实例。这当然不会奏效因为您可能会创建对象的实例
    原型(prototype),而不是对象本身;再加上一个更受欢迎的方法是创建一个新对象并设置该对象的原型(prototype)。
  • 也许你可以用它来弄清楚对象的“类型”是。这看起来很奇怪,因为您可以使用 instanceofObject.prototype.toString() 代替。
  • 你能改变或重新分配构造函数吗?是否有充分的理由做这个?

希望有人能提出一些使用构造函数引用的优秀 Javascript 模式,或者提供该属性为何存在的官方解释。

最佳答案

constructor 属性很方便(或者如果它可靠的话)的一种情况是函数需要知道传递给它的参数的类型,例如

function foo(arg) {
if ( /* if arg is an array */ ) {
// deal with array
} else if ( /* if arg is an object */ ) {
// deal with object
}
}

如果向上述函数传递数组或对象,则 typeof 将在这两种情况下返回 object。可以使用构造函数属性:

  if ( arg.constructor == Array )

但如果数组是在与测试发生的不同框架中创建的(即它的 Array 构造函数是测试范围内 Array 函数的不同对象),则失败。

因此,如果您排除框架(或范围是一个问题的其他情况),那么 constructor 属性就可以用于此目的。

但这并不能解决构造函数属性可写(因此可以设置为任何值)和原型(prototype)链非常简单的一般问题。

关于javascript - Javascript 中的构造函数属性是否有好的用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8073867/

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