当前位置: 首页 > 面试题库 >

真正使用的“ constructor”属性是什么?[重复]

壤驷茂实
2023-03-14
问题内容

在JavaScript中,每个函数的原型对象都有一个constructor指向该函数的不可枚举的属性(EcmaScript§13.2)。它未在任何本机功能中使用(例如,instanceof仅检查原型链),但是我们建议在覆盖prototype用于继承的功能的属性时对其进行调整:

SubClass.prototype = Object.create(SuperClass.prototype, {
    constructor: {value:SubClass, writable:true, configurable:true}
});

但是,我们(包括我在内)是否只是为了清楚和整洁?是否存在依赖于该constructor属性的实际用例?


问题答案:

我真的看不到为什么该constructor属性就是JS中的属性。我偶尔会发现自己使用它来获取IE
<9中对象的原型(例如Event对象)。但是,我确实认为它可以允许某些ppl模仿经典的OO编程构造:

function Foo()
{
    this.name = 'Foo';
}
function Bar()
{
    this.name = 'Bar';
}
function Foobar(){};
Foo.prototype = new Foobar;
Foo.prototype.constructor = Foo;
Bar.prototype = new Foobar;
Bar.prototype.constructor = Bar;
var foo = new Foo();
var bar = new Bar();
//so far the set-up
function pseudoOverload(obj)
{
    if (!(obj instanceof Foobar))
    {
        throw new Error 'I only take subclasses of Foobar';
    }
    if (obj.constructor.name === 'Foo')
    {
        return new obj.constructor;//reference to constructor is quite handy
    }
    //do stuff with Bar instance
}

因此AFAIK,构造函数属性的 “优点” 是:

  • 从实例轻松实例化新对象
  • 能够 你的对象为某一类的子类,但仍然能够检查哪些特定类型的子类,你处理的。
  • 如您所说:保持整洁。


 类似资料:
  • 问题内容: 假设我有“主题”表 和相关的映射对象, 当我尝试保存具有重复的“名称”且没有定义“ unique = true”的对象时,我得到了类似的行为(相同的异常。)很明显,除非向DB伸出援手,否则JPA实现无法真正做任何事情检查。 真正的用例是什么? (我在这里假设,唯一约束也是在数据库级别定义的。) 问题答案: 在如果你让你的JPA提供者为您创建数据库只使用- 这将在指定的列上的唯一约束。但

  • 这个豆子“状态”: 使用ajax“成功”回调通过网络发送: 这里需要注释@JsonProperty吗?使用它有什么好处?我想我可以删除这个注释而不会产生任何副作用。 正在阅读关于https://github.com/FasterXML/jackson-annotations/wiki/Jackson-Annotations我不知道什么时候需要用这个?

  • 问题内容: 这个bean的“状态”: 使用ajax“成功”回调通过电线发送: 这里需要注释@JsonProperty吗?使用它的好处是什么?我想我可以删除此注释而不会引起任何副作用。 在https://github.com/FasterXML/jackson-annotations/wiki/Jackson- Annotations 上阅读有关此注释的信息我不知道何时需要使用此注释? 问题答案:

  • 我收到警告: 我在看医生。 我看到很多关于如何禁用它的帖子,如果我知道我在做什么,就像这一个。 一个有用的总结(或者只是一个正确方向的观点)将非常感谢,这样我就可以决定是否禁用它。我的直觉是我不应该禁用它,所以我想知道如何正确地解决这个问题。

  • 本文向大家介绍calc属性是什么?相关面试题,主要包含被问及calc属性是什么?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: Calc用户动态计算长度值,任何长度值都可以使用calc()函数计算,需要注意的是,运算符前后都需要保留一个空格,例如:width: calc(100% - 10px);

  • 问题内容: 我读到要获取数组的长度,我使用的属性,例如。什么是属性?这是一堂课吗? 问题答案: 属性是字段的另一个术语。它通常是一个公共常量或可以直接访问的公共变量。在这种特殊情况下,Java中的数组实际上是一个对象,并且您正在访问表示数组长度的公共常量值。