2012-05-20 20 views
0

我有這個javasctipt類爲什麼使用原型時,我們可以只添加屬性

function employee(name, jobtitle, born) 
{ 
    this.name = name; 
    this.jobtitle = jobtitle; 
    this.born = born; 
} 

var fred = new employee("Fred Flintstone", "Caveman", 1970); 
employee.prototype.salary = null; 
fred.salary = 20000; 
fred.notprototype = 1239; 
console.log(fred); 

現在你可以看到我使用的原型增加工資財產,但然後我就用fred.notprototype = 1239;無需使用附加的屬性的原型。

當我做了對象fred console.log我看到notprototype那裏。所以不添加原型是不對的?如果是,那麼它有什麼不同?在原型

+1

[面向對象的JavaScript入門](https://developer.mozilla.org/en/Introduction_to_Object-Oriented_JavaScript) – Jivings

回答

3

比方說,畢竟該代碼添加此:

var john = new employee("John Carson", "Philantropist", 2015); 
console.log(john); 

它將顯示johnsalary屬性(價值null)。你沒有自己設定,它來自原型鏈。

通過添加到X的原型,可以更改由new X()創建的所有對象。

又如:

function School(name) 
{ 
    this.name = name; 
} 

School.prototype.getName = function() { 
    return this.name; 
} 

var school_one = new School('one'); 

console.log(school_one.getName()); // prints "one" 

在這個例子中,一種方法getName加入到該原型。一旦創建了school_one對象,它就從School.prototype繼承了所有添加到它的對象(在這種情況下只有一種方法)。

這可用於聲明對象的接口(用於訪問它的方法)或與構造函數分開的默認值。

爲了深入瞭解JavaScript及其獨特功能,我強烈建議查看Douglas Crockford的幾個視頻;他是一位出色的演說家,知識淵博,愛聽他:)

+0

umm,no - 當你添加對於原型而言,_immediately_可以在該類型的_all_對象中訪問。 – Alnitak

+0

通過添加到X的原型,您可以從該點開始更改由新X()創建的所有對象。你能舉一個例子嗎?我有點困惑, – Autolycus

+0

@Alnitak啊對,更新了;他在添加相同屬性到原型之前添加了'.salary'屬性,所以我的腦波​​變得困惑;-)謝謝! –

1

屬性做兩件事情:

  1. 爲「普通」變量,他們可以提供一個默認值,這將是你寫的具有相同名稱的屬性在第一時間隱藏的對象

  2. 對於成員函數,它們減少了包含該函數自己副本的對象的每個實例的開銷。

相關問題