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