将构造函数赋值给某物是什么意思?

What does it mean to assign a constructor to something?

本文关键字:是什么 意思 构造函数 赋值      更新时间:2023-09-26

有时我看到这样的东西,我很不理解:

// ...
that.constructor = ...
//...

我认为构造函数属性不应该是用来赋值的对象,而应该是返回对象所属实例的对象的属性。我认为.constructor是一个像.length一样的属性,用于返回数据的字符串,并且不适合更改。这是真的吗?

当创建ECMAScript函数对象时,它被赋予一个公共的prototype属性,该属性是一个普通对象,以防该函数被用作构造函数。原型对象被赋予一个公共构造函数属性,该属性是对函数的引用。从构造函数创建的实例将继承原型的构造函数属性(除非它被实例上的构造函数属性遮蔽,或者在它的prototype链上)。

构造函数属性可以被重新赋值,通常是因为原始原型对象被其他对象所替换。构造函数属性可以设置为任何值,因此它不是特别有用。

关于宿主对象的prototype属性(如果它们有的话),请注意它们可以做任何它们喜欢做的事情(包括当您试图设置甚至访问它们时抛出错误)。

你不能改变所有javascript对象实例的构造函数。在mozilla的文档中有一个简洁的例子:

function Type(){};
var types = [
    new Array,  [],
    new Boolean,    true,
    new Date,
    new Error,
    new Function,   function(){},
    Math,   
    new Number, 1,
    new Object, {},
    new RegExp, /(?:)/,
    new String, "test"
];
for(var i = 0; i < types.length; i++){
    types[i].constructor = Type;
    types[i] = [types[i].constructor, types[i] instanceof Type, types[i].toString()];
};
alert(types.join("'n"));
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/constructor

据我所知,构造函数将返回创建对象原型的函数。

http://www.w3schools.com/jsref/jsref_constructor_boolean.asp

例如,像w3schools说:

<script type="text/javascript">
var bool=new Boolean();
document.write(bool.constructor);
</script> 

将返回:

function Boolean() { [native code] }

我从未使用过它,但我认为它是用于调试目的。