function Circle(radius) {
this.radius = radius;
}
我想通過玩控制檯來了解對象和原型。當我嘗試「圈」,它給了這個功能。但是,當我試圖Circle.prototype它給了一個對象。 Circle如何獲得原型屬性。它有構造函數和Object的原型。有些人能解釋這種層次結構函數原型是如何創建的?
function Circle(radius) {
this.radius = radius;
}
我想通過玩控制檯來了解對象和原型。當我嘗試「圈」,它給了這個功能。但是,當我試圖Circle.prototype它給了一個對象。 Circle如何獲得原型屬性。它有構造函數和Object的原型。有些人能解釋這種層次結構函數原型是如何創建的?
要使用你的代碼來創建一個圓,你會如果你想要那個圈子後,var circ = new Circle(10);
使用使用new Circle(10);
,或。這將創建一個新的圓形對象供您隨意使用。
Circle
是一個函數,另一種變量或對象。您設置了Circle
,現在當您鍵入Circle
時,它將返回該函數本身。不是一個新的圈子。每一個功能都有一些屬性,而prototype
就是其中之一。
prototype
對象是每個函數的一部分,用於處理類。你可以閱讀關於它here。
當您創建新的函數時,JS將創建具有屬性名稱,長度和原型的新函數對象。名稱是函數名稱,長度是參數數量,原型是對JS對象創建的引用第一個函數對象的構造函數屬性的引用。所以當你創建一個函數時,你實際上創建了2個新的對象,函數對象和原型對象。
欲瞭解更多信息,請參閱本30分鐘講座:
http://www.objectplayground.com/
如果你只想在功能部分,轉到分鐘16:40。
在Javascript中,函數是一個對象。每個對象都有一個「祕密」原型屬性。 在你的情況下,Circle的原型是Function的原型,因爲Circle是一個函數。 每個對象派生自的根對象都是Object對象,因此如果您可以沿着原型鏈走直到到達Object對象。 如果您打算使用Cirle作爲構造函數並用new來調用它,這意味着您將創建其他將成爲Circle實例的對象,並且其原型將指向Circle.prototype。 有關原型如何工作的更詳細說明,網上有非常好的資源。 例如,您可以閱讀:http://eloquentjavascript.net/關於數據結構的章節:對象和數組。
您可以通過執行Object.getPrototypeOf(Circle)來檢查Circle的原型,以確認這將是Function原型。
這是正確的,但現在OP在詢問什麼。 – Bergi
我認爲當你讀到有人寫「每個物體都有一個原型屬性」時,就會產生誤解。
函數在Javascript中是對象。和每個對象一樣,函數有一些屬性和方法,其中一些是默認定義的:length屬性,prototype屬性,call()apply()和bind()方法等等。因此,一個函數有一個原型屬性,默認情況下
function myfunc(){
return "yes I'm a function";
}
//I said that function are objects having properties and methods
//this means you can call them, for example
myfunc.prototype
,你會看到你從調用該物業的回報有值是一個對象。好的,現在就到此爲止了。現在
,你可以使用任何功能作爲一個構造函數,這樣你就可以用new
關鍵字
var myobj = new myfunc()
共同創造一個新的對象調用的函數,你將有一個新的對象。這個對象還沒有默認
myobj.proptotype //=> unefined
我們不能說一個原型屬性對象的原型屬性:函數都有一個原型屬性,對象沒有。
但是,每個對象都與一個原型對象相關聯,從中繼承了屬性和方法。你想看看原型對象的價值是什麼?其中一個解決方案是
myobj.__proto__
您將看到自定義對象的原型對象的值。
現在,看看myobj.__proto__
的值和myfunc.prototype
的值:它們是相同的。這只是意味着構造函數的原型屬性(換句話說,爲了創建新對象而使用關鍵字new
使用的函數的原型屬性)將用作新對象的原型。
請牢記這一點。
函數是對象,所以函數默認具有屬性和方法。
函數有一個原型屬性。
您可以使用函數作爲構造函數來創建新的對象。
對象還沒有一個原型屬性。
對象有一個原型對象。
原型對象的值與構造函數的prototype屬性相同。
'.prototype'總是存在,因爲它是一個對象。 – zerkms
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Inheritance_and_the_prototype_chain – Mchl
但是Circle是功能? –