Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript “constructor”属性的真正用途是什么?_Javascript_Constructor_Prototype - Fatal编程技术网

Javascript “constructor”属性的真正用途是什么?

Javascript “constructor”属性的真正用途是什么?,javascript,constructor,prototype,Javascript,Constructor,Prototype,在JavaScript中,每个函数的原型对象都有一个指向函数()的不可枚举属性constructor。它不用于任何本机功能(例如,instanceof仅检查原型链),但是,当覆盖函数的prototype属性进行继承时: SubClass.prototype = Object.create(SuperClass.prototype, { constructor: {value:SubClass, writable:true, configurable:true} }); 但是,我们(包括

在JavaScript中,每个函数的原型对象都有一个指向函数()的不可枚举属性
constructor
。它不用于任何本机功能(例如,
instanceof
仅检查原型链),但是,当覆盖函数的
prototype
属性进行继承时:

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

但是,我们(包括我)这样做仅仅是为了清晰和整洁吗?是否存在依赖于?

Whats my understanding constructor属性的实际用例,用于查看特定对象是否由哪个函数构造函数创建或构造

这是一个很好的例子:
我真的不明白为什么JS中的
构造函数是
属性。我偶尔会发现自己在IE<9中使用它来获得对象的原型(比如事件对象)。然而,我确实认为它允许一些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
}
因此,顺便说一句,constructor属性的“优势”是:

  • 轻松地从实例实例化新对象
  • 能够将对象分组为某个类的子类,但仍然能够检查所处理的子类的特定类型
  • 正如你所说:保持整洁
我的理解构造函数属性用于查看特定对象是否由哪个函数构造函数创建或构造。相关:,尽管答案没有帮助参见:那篇文章根本没有使用
构造函数
属性。你可能想通过阅读来理解我的要求:-)对不起,我是说原型..我的错:)