有時候,我看到這樣的事情,我非常不理解:這是什麼意思分配一個構造函數的東西?
// ...
that.constructor = ...
//...
我雖然constructor屬性是不應該被什麼東西給分配東西,但返回的屬性,其對象是一個實例。我認爲.constructor
是一個像.length
這樣的屬性,用於返回數據的字符串,並不能完全改變。這是真的?
有時候,我看到這樣的事情,我非常不理解:這是什麼意思分配一個構造函數的東西?
// ...
that.constructor = ...
//...
我雖然constructor屬性是不應該被什麼東西給分配東西,但返回的屬性,其對象是一個實例。我認爲.constructor
是一個像.length
這樣的屬性,用於返回數據的字符串,並不能完全改變。這是真的?
當創建一個ECMAScript中函數對象,它被賦予一個公共原型屬性,它是一個普通的對象,只是使用功能的情況下作爲構造函數。該原型對象被賦予一個公共的構造函數屬性,該屬性是對該函數的引用。從構造函數創建的實例將繼承原型的構造函數屬性(除非它被實例上的構造函數屬性或其更高版本的原型鏈所掩蓋)。
構造函數屬性可能會被重新賦值,通常是因爲原始原型對象被替換爲其他對象。構造函數屬性可以設置爲任何東西,因此它不被視爲特別有用。
關於主機對象的prototye屬性(如果他們有一個),請注意他們可以做任何他們喜歡的事情(包括在嘗試設置甚至訪問它們時拋出錯誤)。
據我所知,構造函數將返回創建對象原型的函數。
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] }
我從來沒有使用過,但我想這是用於調試目的。
只是一個參考,但引用'w3schools',雖然沒有明顯的錯誤,但幾乎總會引起SO的指責。請參閱:http://w3fools.com。 –
哦。對不起,我是新來的。 xD – Singular1ty
您無法更改所有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
值得指出的是,上述內容是**內置的ECMAScript對象,它們是特殊的,並且與其他本地對象(即使用腳本創建的對象,但不是主對象創建的對象)行爲不同。 – RobG
但是,對任何事情設置'構造器'有什麼意義?它不是默認設置的嗎? – 0x499602D2
我認爲@RobG給出的答案給出了一個更好的描述,爲什麼你會考慮改變它。 – spike
構造函數通常(使用語言)創建對象時調用的代碼。 JS有警告。請參閱:http://bonsaiden.github.com/JavaScript-Garden/#function.constructors –
可能的重複[Javascript:原型繼承](http://stackoverflow.com/questions/892595/javascript-prototype-inheritance) – mVChr