有时我会看到这样的东西,我完全不理解:
// ...
that.constructor = ...
//...
我虽然构造函数属性不应该是分配内容的东西,而是返回该对象是其实例的属性。我认为.constructor
是一个像.length
这样的属性,用于返回数据的字符串,不允许更改。这是真的吗?
答案 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] }
我从未使用它,但我认为它是出于调试目的。