原型對象(prototype)
- 我們所建立的每一個函數,解析器都會向函數中添加一個屬性prototype,這個屬性對應着一個對象,這個對象就是我們所謂的原型對象
- 如果函數作為普通函數調用prototype沒有任何作用,當函數以構造函數的形式 調用時(var x=new y)它所建立的對象中都有一個隐含的屬性,執行該構造函數的原型對象,我們可以通過__proto__來通路該屬性
- 原型對象就相當于一個公共的區域,所有同一個類的執行個體都可以通路到這個原型對象,我們可以将對象中共有的内容,統一設定到原型對象中。
- 當我們通路對象的一個屬性或方法時,它會先在對象自身中尋找,如果有則直接使用,如果沒有則會去原型對象中尋找,如果找到則使用。
- 原型對象也是對象,是以它也有原型,當我們使用一個對象的屬性或方法時,會先在自身中尋找,自身中如果有,則直接使用,如果沒有則取原型對象中尋找,如果原型對象中有,則使用,如果沒有則去原型的原型中尋找,查到object對象的原型,object對象的原型沒有原型,如果在object中依然沒有找到,則傳回undefined
mc.__protp__.__protp__.__protp__
執行個體應用:
function Person(){
}
Person.prototype.sayName=function(){
alert("大家好,我是"+this.name);
};
var p=new Person();
p.sayName();
為什麼要有原型對象
一個函數要很多地方要用,将函數定義在全局作用域,污染了全局作用域的命名空間,而且定義在全局作用域中也很不安全