/*
原型:protopyte
我們新建的每一個函數(shù),解析器都會向函數(shù)中添加一個屬性propotype
如下:
*/
function Person(){}
console.log(Person.prototype);
/*
原型對象: 這個屬性對應著一個對象,這個對象就是我們所謂的原型對象
作用: 如果函數(shù)作為普通函數(shù)調(diào)用, prototype沒有任何作用
當函數(shù)以構(gòu)造函數(shù)的形式調(diào)用時,如下:
*/
function Person(){}
let p1 = new Person();
// 它所創(chuàng)建的對象中都會有一個隱含的屬性, 指向該構(gòu)造函數(shù)的原型對象, 我們可以通過__proto__來訪問該對象
console.log(p1.__proto__);
/* 原型對象就相當于一個公共的區(qū)域,所有同一個類的實例都可以訪問到這個原型對象
我們可以把 對象中 共有的內(nèi)容, 統(tǒng)一設置到原型對象中
如下:
*/
//向Person中添加一個屬性
Person.prototype.country = "中國";
console.log(p1.country); //并沒有在p1中設置,但卻有
//向Person中添加一個方法
Person.prototype.speak = function(){
console.log("我很棒!");
}
p1.speak();
/*
當我們訪問對象一個屬性或方法時,它會先在對象自身中尋找,如果有,則直接使用,如果沒有,則會去原型對象中尋找,如果找到則直接使用
*/
/*
總之: 我們創(chuàng)建構(gòu)造函數(shù)時,可以將這些對象共有的屬性和方法, 統(tǒng)一添加到構(gòu)造函數(shù)的原型對象中,這樣就不用分別為每一個對象添加, 也不會影響到全局作用域, 就可以使 每個對象都具有這些屬性和方法了
*/