为某些东西分配构造函数意味着什么?

时间:2011-09-06 01:07:37

标签: javascript

有时我会看到这样的东西,我完全不理解:

// ...

that.constructor = ...

//...

我虽然构造函数属性不应该是分配内容的东西,而是返回该对象是其实例的属性。我认为.constructor是一个像.length这样的属性,用于返回数据的字符串,不允许更改。这是真的吗?

3 个答案:

答案 0 :(得分:2)

创建ECMAScript函数对象时,会为其提供一个公共 prototype 属性,该属性是一个普通对象,以防该函数用作构造函数。原型对象被赋予一个公共构造函数属性,该属性是对函数的引用。从构造函数创建的实例将继承原型的构造函数属性(除非它被实例上的构造函数属性或更高的原型链所覆盖)。

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

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

答案 1 :(得分:1)

您无法更改所有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

答案 2 :(得分:0)

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

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] }

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