2011-09-06 36 views
1

有時候,我看到這樣的事情,我非常不理解:這是什麼意思分配一個構造函數的東西?

// ... 

that.constructor = ... 

//... 

我雖然constructor屬性是不應該被什麼東西給分配東西,但返回的屬性,其對象是一個實例。我認爲.constructor是一個像.length這樣的屬性,用於返回數據的字符串,並不能完全改變。這是真的?

+1

構造函數通常(使用語言)創建對象時調用的代碼。 JS有警告。請參閱:http://bonsaiden.github.com/JavaScript-Garden/#function.constructors –

+0

可能的重複[Javascript:原型繼承](http://stackoverflow.com/questions/892595/javascript-prototype-in​​heritance) – mVChr

回答

2

當創建一個ECMAScript中函數對象,它被賦予一個公共原型屬性,它是一個普通的對象,只是使用功能的情況下作爲構造函數。該原型對象被賦予一個公共的構造函數屬性,該屬性是對該函數的引用。從構造函數創建的實例將繼承原型的構造函數屬性(除非它被實例上的構造函數屬性或其更高版本的原型鏈所掩蓋)。

構造函數屬性可能會被重新賦值,通常是因爲原始原型對象被替換爲其他對象。構造函數屬性可以設置爲任何東西,因此它不被視爲特別有用。

關於主機對象的prototye屬性(如果他們有一個),請注意他們可以做任何他們喜歡的事情(包括在嘗試設置甚至訪問它們時拋出錯誤)。

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

我從來沒有使用過,但我想這是用於調試目的。

+2

只是一個參考,但引用'w3schools',雖然沒有明顯的錯誤,但幾乎總會引起SO的指責。請參閱:http://w3fools.com。 –

+0

哦。對不起,我是新來的。 xD – Singular1ty

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

+1

值得指出的是,上述內容是**內置的ECMAScript對象,它們是特殊的,並且與其他本地對象(即使用腳本創建的對象,但不是主對象創建的對象)行爲不同。 – RobG

+0

但是,對任何事情設置'構造器'有什麼意義?它不是默認設置的嗎? – 0x499602D2

+0

我認爲@RobG給出的答案給出了一個更好的描述,爲什麼你會考慮改變它。 – spike

相關問題