2012-06-01 19 views
3

請告訴我之間的差(通過原型)請告訴我差聲明變量具有和不具有原型

var Todo = {}; 

Todo.prototype.name = "..."; 
Todo.prototype.hello = function() { ... } 

VS(變量&函數「外」對象)

var Todo = {} 
Todo.name = "..." 
Todo.hello = function() { ... } 

或甚至低於:變量&功能對象

var Todo = { 
    name: "...", 
    hello = function() { ... } 
} 
+0

實施例2和3幾乎是相同的 – fcalderan

+0

第一個甚至不工作,因爲對象的實例沒有默認的原型屬性。 – Niko

回答

2

認爲它像

的屬性或與原型聲明的函數是待辦事項的實例成員。

一個屬性或不原型聲明的函數是待辦事項的靜態成員。

0

Todo.prototype也是一個對象,所以不同的是,如果你與原型財產申報,然後從誰這個原型創建將有屬性的每一個對象,否則,物業只負責Todo對象的自我。

2

第一個在處理對象實例(({}) instanceof Object === true)時沒有意義,它不會有prototype屬性(Object)。

您可以詢問關於這兩個模式之間的差異...

var ObjA = function() { 
    this.method = function() {}; 
}; 

var ObjB = function() {}; 

ObjB.prototype.method = function() {}; 

jsFiddle

前者將使用更多的內存實例化時 - 每個對象都有自己的method。後者將不會每個人都有自己method,則methodprototype對象,它是在原型鏈指揮下一個當其試圖在父訪問的生活。

0

方法#1和#2之間的差異顯著(其幾乎是相同的實施例#3),你需要如果通過原型,例如延長的函數的使用是new關鍵字

var Todo1 = function() {}; 
Todo1.prototype.name = "Foobar"; 

var Todo2 = {name: "Foobar" } 

var a = Todo1; 
console.log(a.name); // no property retrieved 

var b = Todo2; 
console.log(b.name); // Foobar 

var c = new Todo1; 
console.log(c.name); // Foobar 
相關問題