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